VCDIFF для Java или альтернативные двоичные форматы diff
Существует ли реализация Java с открытым исходным кодом формата двоичных различий VCDIFF (декодер и кодер)?
Есть xdelta и open-vcdiff, но это обе библиотеки C.
Альтернативно, есть ли другие форматы / алгоритмы, которые можно использовать для создания различий для двоичных файлов из Java?
5 ответов
Вы можете генерировать двоичные различия, используя badiff; веб-сайт
и это доступно на Maven Central. Он имеет лицензию BSD, поэтому дружелюбен как для OSS, так и для рекламы. Используемый алгоритм представляет собой кусочную версию O(ND) diff, описанную в этой статье:
http://www.xmailserver.org/diff2.pdf
Формат diff не особо совместим ни с чем другим, но он производит действительно хорошие и очень маленькие различия.
Библиотека довольно быстрая; на моем настольном компьютере он может генерировать разность для двух случайных входных потоков по 50 МБ за 54 секунды. Надеюсь, это достаточно быстро; Я думаю, что это довольно внушительно, так как это сравнение двух потоков токенов по 50 миллионов токенов в каждом. Badiff будет использовать преимущества нескольких процессорных ядер при вычислении различий.
Отказ от ответственности: я автор Badiff, поэтому, конечно, я думаю, что это круто. Я всегда открыт для предложений; такие вещи, как возможность чтения / записи "стандартных" форматов двоичного различий, звучат как крутые новые функции, которые будут добавлены в будущих выпусках.
Я перенес vcdiff декодер MiscUtil на Java. https://github.com/xiaxiaocao/jvcdiff update: теперь он также имеет кодировщик vcdiff
У меня есть декодер для VCDIFF, написанный на C#, который, вероятно, будет довольно просто перенести на Java, если это поможет. Это часть MiscUtil, но я не думаю, что он основан на каких-либо других битах MiscUtil (или, во всяком случае, минимально).
К сожалению, я так и не смог написать кодировщик, что, очевидно, сложнее - и в нашем случае это было не нужно (где нам нужно было применять исправления в.NET на мобильном устройстве, но мы могли создавать их так, как нам хотелось на сервере),
Существует java-порт xdelta: http://sourceforge.net/projects/javaxdelta/
Но ничего не могу сказать о его качестве - я еще не пробовал.
У меня есть порт Java open-vcdiff на Github. Он протестирован на open-vcdiff, но нигде не используется в производстве.