Существующее решение для файловых дельт / версий в Java - PullRequest
5 голосов
/ 13 февраля 2011

При создании версий или оптимизации резервных копий файлов одной идеей является использование только дельты или данных, которые были изменены.

Поначалу это звучит как простая идея, но на самом деле определить, где заканчиваются неизмененные данные и начинаются новые, представляется сложной задачей.

Существует ли уже существующий фреймворк, который делает что-то подобное или эффективный алгоритм сравнения файлов?

Ответы [ 5 ]

3 голосов
/ 14 февраля 2011

XDelta не Java, но стоит посмотреть в любом случае. Существует Java-версия , но я не знаю, насколько она стабильна.

3 голосов
/ 13 февраля 2011

Вместо того, чтобы кататься самостоятельно, вы можете использовать систему управления версиями с открытым исходным кодом (например, Subversion ).Таким образом, вы получаете гораздо больше, чем просто алгоритм дельта-контроля версий.

1 голос
/ 04 сентября 2012

На мой взгляд, инструмент Bsdiff - лучший выбор для бинарных файлов.Он использует сортировку суффиксов (qsufsort Ларссона и Садакане) и использует преимущества изменения исполняемых файлов.Bsdiff был написан на C ++ Колином Персивалем.Файлы Diff, созданные в Bsdiff, обычно меньше, чем файлы, созданные в Xdelta.

Стоит также отметить, что Bsdiff использует алгоритм сжатия bzip2.Двоичные патчи, созданные Bsdiff, иногда могут быть дополнительно сжаты с использованием других алгоритмов сжатия (например, архиватора WinRAR).

Здесь вы можете найти документацию по Bsdiff и скачать Bsdiff бесплатно:

1 голос
/ 13 февраля 2011

Вот библиотека Java, которая может вычислять различия между двумя текстовыми файлами:

http://code.google.com/p/google-diff-match-patch/

Я не знаю ни одной библиотеки для двоичных различий.Попробуйте прибегнуть к поиску 'java binary diff'; -)

1 голос
/ 13 февраля 2011

Похоже, вы описываете схему хранения на основе различий. Большинство систем контроля исходного кода используют такие системы, чтобы минимизировать свои требования к хранилищу. Команда * nix "diff" способна генерировать данные, которые вам понадобятся для ее реализации самостоятельно.

...