Что-то вроде дайджеста сообщения, но он постепенно описывает файл

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам