ОБНОВЛЕНИЕ. Я решил проблему с помощью отличной внешней библиотеки — https://code.google.com/p/xdeltaencoder/. То, как я это сделал, опубликовано ниже как принятый ответ
Представьте, что у меня есть два отдельных компьютера, каждый из которых имеет одинаковый byte[] A.
Один из компьютеров создает byte[] B, который почти идентичен byte[] A, но является «более новой» версией.
Чтобы второй компьютер обновил свою копию байта [] A до последней версии (байт [] B), мне нужно передать весь байт [] B второму компьютеру. Если byte[] B имеет размер в несколько ГБ, это займет слишком много времени.
Можно ли создать байт [] C, который является «разницей» между байтом [] A и байтом [] B? Требования к byte[] C заключаются в том, что, зная byte[] A, можно создать byte[] B.
Таким образом, мне нужно будет передать только byte[] C на второй ПК, что теоретически будет лишь частью размера byte[] B.
Я ищу решение этой проблемы в Java.
Большое спасибо за любую помощь, которую вы можете предоставить :)
РЕДАКТИРОВАТЬ: характер обновлений данных в большинстве случаев заключается в том, что дополнительные байты вставляются в части массива. Конечно, возможно, что некоторые байты будут изменены или некоторые байты удалены. сам byte[] представляет собой дерево имен всех файлов/папок на целевом компьютере. byte[] изначально создается путем создания дерева пользовательских объектов, их упорядочения с помощью JSON и последующего сжатия этих данных с помощью алгоритма zip. Я изо всех сил пытаюсь создать алгоритм, который может разумно создавать объект c.
РЕДАКТИРОВАТЬ 2: Большое спасибо за всю помощь, которую все здесь оказали, и я прошу прощения за то, что не был активен в течение такого долгого времени. Скорее всего, я попытаюсь получить внешнюю библиотеку для выполнения дельта-кодирования за меня. Самое замечательное в этой теме то, что теперь я знаю, чего я хочу добиться, называется! Я считаю, что когда я найду подходящее решение, я опубликую его и приму, чтобы другие могли увидеть, как я решил свою проблему. Еще раз большое спасибо за вашу помощь.
A
иB
. Проблема заключается в том, чтобы выяснить, как сопоставить позициюx
вC
сA
. То есть дельта (C
) будет только длиной числовых байтов, которые изменились, но как вы затем сопоставите это обратно с правильной позицией вA
. Вы можете ввести информацию о позиции вC
, так чтоx
будет позицией, аx+1
будет фактическими данными... например. Затем вам нужно будет рассмотреть кодирование длины прогона (так что у вас будетx
= позиция,x+1
- длина, затемx+2+length
- данные... Или вы можете запустить все это черезZipStream
- person MadProgrammer   schedule 24.01.2014byte
недостаточно велико, не думал об этом ... вы можете сделать некоторый битовый сдвиг (это правильный термин) и использовать 4/8 байтов на позицию или что-то в этом роде ... примерно здесь я думаю, что должен быть более простой способ сделать это... - person MadProgrammer   schedule 24.01.2014