Комментарий Marco вдохновил меня пробовать несколько вещей, о которых я не думал, и я обнаружил ответ. Ну, я предполагаю, что обнаружил альтернативу. Если кто-либо знает больше об этом, добавьте ответ.
Я должен указать заранее, как я передавал файл. Это было сделано по сети (конечно), через соединение WebDAV с моим NAS Synology.
После комментария Marco я протестировал копирование приблизительно 11,7 ГБ к NAS с помощью нескольких различных методов:
Samba: Не только была средняя скорость намного быстрее, но и она не имела waiting-for-data-to-load проблемы.
FTP: средняя скорость была быстрее, передача не остановилась для ожидания данных для загрузки в поршень, но иногда ЦП будет становиться немного забавным..., и этим я подразумеваю, что это истратило одно из ядер, и я должен был уничтожить процесс FTP, потому что это продолжало съедать ЦП даже после того, как я отменил передачу.
WebDAV: То же как прежде - RAM захватила бы набор данных, данные передадут, затем RAM вывела бы его и захватила бы больше, передача это, &tc.
Таким образом, я обнаружил, что Samba является лучшим методом в этом экземпляре. Я сделал немного поиска с помощью Google и видел, что некоторые люди чувствуют, что WebDAV является неуклюжим протоколом специально для LAN.
Однако, я не знаю, является ли это просто способом, которым WebDAV - если у других людей есть та же проблема - или если это - что-то не так с Монетным двором, или если это - просто моя конкретная установка Монетного двора. Таким образом, я думаю, что дам это за несколько дней до того, как я выберу это как лучший ответ только, чтобы видеть, есть ли у других лучшие решения/больше добавить, что я не могу добавить.
Для копирования файла с одного хоста на другой требуется демон на удаленном хосте, реализующий некоторый протокол передачи файлов прикладного уровня. Это требование не имеет значения, с какого языка вы собираетесь говорить с этим удаленным демоном.
Вашими возможностями для Linux-систем являются:
Все это кажется большим трудом, и на деле это так, потому что нет ни одного широко распространенного и стандартизованного протокола, который был бы реализован и настроен "из коробки в коробку" на большинстве систем.
Этот фрагмент кода можно использовать для копирования файлов на другой компьютер с Linux
.
JSch jsch = new JSch();
Session session = null;
session = jsch.getSession("username","hostname",22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
ChannelSftp channel = null;
channel = (ChannelSftp)session.openChannel("sftp");
channel.connect();
File localFile = new File("localfilepath");
//If you want you can change the directory using the following line.
channel.cd(RemoteDirectoryPath)
channel.put(new FileInputStream(localFile),localFile.getName());
channel.disconnect();
session.disconnect();
с этим я добавил свой открытый ключ в удаленную систему, сгенерированный с помощью ssh-keygen
. Таким образом, он не будет запрашивать пароль каждый раз, когда вы запускаете программу.