Как к concat два или больше gzip файла/потока

Это не похоже на Вас, absolutly не может обойти частность участников ни на каком языке (адресная арифметика с указателями в C++, Отражения в.NET/Java).

Дело в том, что Вы получаете ошибку, при попытке назвать закрытый метод случайно. Но если Вы хотите выстрелить себе в ногу, идти вперед и сделать это.

Редактирование: Вы не пытаетесь защитить свой материал инкапсуляцией OO, не так ли?

13
задан Community 23 May 2017 в 12:34
поделиться

4 ответа

См. RFC1951 и RFC1952

Формат - это просто набор элементов, каждый из которых состоит из трех частей: заголовка, данных и трейлера. . Часть данных сама по себе представляет собой набор фрагментов, каждый из которых имеет заголовок и часть данных.

Чтобы смоделировать эффект сжатия в результате объединения двух (или более файлов), вам просто нужно настроить заголовки (там (например, флаг последнего фрагмента) и трейлер и копирование частей данных.

Есть проблема, у трейлера есть CRC32 несжатых данных, и я не уверен, легко ли его вычислить, если вы знаете CRC частей.

Edit: комментарии в найденном вами файле gzjoin.c подразумевают, что, хотя можно вычислить CRC32 без распаковки данных,

12
ответ дан 1 December 2019 в 22:24
поделиться

Если tar их не исключено (поскольку связанное решение cat для вас неприменимо):

tar cf A_B.gz.tar A.gz B.gz

Затем, чтобы вернуть их:

tar xf A_B.gz.tar
2
ответ дан 1 December 2019 в 22:24
поделиться

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

Обратите внимание, что (1) подход gzjoin.c, скорее всего, будет лучшим ответом, который вы могли бы получить на свой вопрос, как указано (2) это сложная микрохирургия, выполненная одним из создателей gzip и, возможно, не подвергавшаяся обширному стресс-тестированию.

Пожалуйста, рассмотрите скучный и понятный надежный подход: сохранение исходных фрагментов без сжатия, затем выбор необходимых фрагментов, объединение и сжатие их. Обратите внимание, что степень сжатия может быть лучше, чем полученная путем склеивания небольших сжатых деталей.

2
ответ дан 1 December 2019 в 22:24
поделиться

В руководстве по gzip говорится, что два файла gzip могут быть объединены по мере вашей попытки.

http://www.gnu.org/software/gzip /manual/gzip.html#Advanced-usage

Таким образом, похоже, что другие инструменты могут быть неисправны. Как видно из этого отчета об ошибке. http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=97263

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

Как уже упоминалось другими, вы можете выполнить операцию: http://www.gzip.org/zlib/rfc-gzip.html

И для этого требуется CRC-32 окончательного несжатого файла. Требуемый размер несжатого файла может быть легко вычислен путем сложения длин отдельных субфайлов.

В нижней части последней ссылки есть код для вычисления текущего crc-32 с именем update_crc.

Расчет CRC для несжатых файлов каждый раз при запуске вашего процесса, вероятно, дешевле, чем сам алгоритм gzip.

6
ответ дан 1 December 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: