, По этой причине ваши примеры создают разные сжатые выходные данные на одном входе. Но если вы возьмете вывод из программы Go или Ruby и распакуете (независимо от того, сделали ли вы Ruby или Go или какую-либо реализацию, соответствующую стандарту), это снова даст точно такое же значение.
лизую программу, которая выкачивает файл в Git BLOB и сохраняет его соответствующим образом.
у меня естьСсылочная реализация ruby это основано настатья из git book
Я пытаюсь реализовать это на ходуВот
Однако я сталкиваюсь с проблемой, когда хранимые сжатые данные немного отличаются в каждой реализации.
vbindiff
показывает, что первые 2 байта идентичны (как запустить изэтот тестовый скрипт) (Если я правильно читаю). Эти байты хранят метод сжатия и флаги и флаги соответственно (согласноhttps://tools.ietf.org/html/rfc1950). Третий байт, где начинается различие, это либо идентификатор словаря, либо начало исходных входных данных. Данные остаются похожими до конца файла. Я предполагаю, что это, вероятно, разница в контрольной сумме ADLER32.
Кажется, что реализации zlib и go, и Ruby не передают словарь в zlib по умолчанию (согласноgo zlib source а такжерубиновый источник)
Данные кажутся идентичными.
Я не уверен, есть ли ошибка реализации в библиотеках или я просто что-то упускаю.
Почему эти результаты разные?