2012-02-17 1 views
3

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

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

ответ

3

Если я правильно понял ваш вопрос, вам нужно синхронизировать файлы на двух системах. Существует инструмент под названием rsync, который может синхронизировать два файла (или целые каталоги), только отправив изменения, внесенные в файл.

Вы также можете быть заинтересованы в Rsync algorithm.

+0

rsync был первым, что пришло на ум. Для него есть даже оболочки Java (хотя я бы не рекомендовал ни одного из существующих). – Perception

+0

абсолютно идеально, я не мог использовать существующую библиотеку в полном объеме, так как мне понадобится использовать собственный протокол связи. Этот алгоритм похож на то, что мне нужно для оптимизации моей системы. – feldoh

 Смежные вопросы

  • Нет связанных вопросов^_^