Передача файлов с использованием Java - PullRequest
0 голосов
/ 27 апреля 2010

Мне нужно перенести множество небольших файлов на удаленный компьютер в рамках моей Java-программы. Мне было интересно, если кто-нибудь может предложить лучший способ сделать это ... Мне нужно передать много маленьких файлов , и это должно быть очень быстро. Должен ли я использовать некоторые существующие реализации протокола? может быть ftp?

Одна важная вещь заключается в том, что большинство файлов будут одинаковыми все время, или разница будет незначительной, поэтому я подумал об использовании git для этой цели. У кого-нибудь есть опыт работы с чем-то вроде этого?

Ответы [ 5 ]

3 голосов
/ 28 апреля 2010

Из вашего описания, rsync абсолютно идеально подходит для ваших требований, намного превосходя предложенные альтернативы.

0 голосов
/ 28 апреля 2010

Apache VFS - это java-библиотека, которую вы можете использовать из своей программы для копирования файлов между файловыми системами (например, копировать локальные файлы на FTP / SCP / HTTP.)

Копирование можно настроить так, чтобы копировались только файлы в источнике, которые новее, чем место назначения, что уменьшает объем отправляемых данных.

Ссылки

  1. Apache VFS
  2. файловая система поддерживается.
0 голосов
/ 27 апреля 2010

Кто получает файлы, которые вы отправляете? другое приложение? Вы можете использовать программное обеспечение для обмена сообщениями, например active MQ

или Придерживайтесь API Java Net для FTP.

URL url = new URL("ftp://user:password@server/filename;type=i");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream(); // To download
OutputStream os = urlc.getOutputStream(); // To upload

Хотите знать, почему вы хотите задействовать Git. Предоставляет ли он какой-либо API для поиска дельты и т. Д.? Я так не думаю. Насколько я знаю, git - это система контроля версий.

0 голосов
/ 27 апреля 2010

Самый эффективный способ передачи большого количества маленьких файлов - это архив; например ZIP или TAR. Если ваша сеть относительно медленная, сжатие архива перед передачей будет иметь большое значение для файлов. Но если сеть действительно быстрая, сжатие может фактически увеличить общее время передачи файлов. Другим фактором, который имеет большое значение, является скорость, с которой файловая система может читать и (особенно) создавать файлы.

Протокол Git может быть очень быстрым, но он достигает этого, отправляя только файлы, которые были изменены, и (где это возможно) отправляя различия вместо полных файлов. Этот подход не может быть использован для обычной передачи файлов. Rdist и rsync - это старые инструменты UNIX / Linux, которые используют тот же (дифференциальный) подход к передаче файлов, что и Git и другие системы контроля версий. Они не помогут вам по тем же причинам, что и Git ... в общем.

0 голосов
/ 27 апреля 2010

Как вы относитесь к сжатию этих файлов, а затем к использованию ftp? У вас есть возможность распаковать на стороне приемника?

Git - это система управления версиями, нет необходимости добавлять файлы git поверх этих ваших файлов, если вы не будете проверять файлы позже. Я бы лучше использовал ftp.

Вот хорошая статья о библиотеках java ftp (или вы можете использовать системный вызов для клиента ftp консоли, но мне не нравится эта идея)

...