, По этой причине ваши примеры создают разные сжатые выходные данные на одном входе. Но если вы возьмете вывод из программы 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 а такжерубиновый источник)

Данные кажутся идентичными.

Я не уверен, есть ли ошибка реализации в библиотеках или я просто что-то упускаю.

Почему эти результаты разные?

Ответы на вопрос(1)

Ваш ответ на вопрос