Chcę połączyć dwa lub więcej strumieni gzip bez ich kompresowania.Jak połączyć dwa lub więcej plików/strumieni gzip
Mam na myśli, że mam skompresowane do A.gz i B do B.gz, chcę skompresować je do pojedynczego gzip (A + B) .gz bez kompresji po raz kolejny, używając C lub C++.
Kilka uwag:
- Nawet można po prostu concat dwa pliki i gunzip będzie wiedział, jak radzić sobie z nimi, większość programów nie będzie w stanie poradzić sobie z dwoma kawałkami.
- Widziałem kiedyś przykład kodu, który robi to po prostu przez dekompresję plików, a następnie manipulowanie oryginałem i to znacznie szybciej niż normalna ponowna kompresja, ale nadal wymaga operacji O (n) CPU.
- Niefortunnie Nie mogę znaleźć tego przykładu, który znalazłem raz (konkatenacja tylko przy użyciu dekompresji), jeśli ktoś może wskazać to, byłbym wdzięczny.
Uwaga: nie jest to duplikat this, ponieważ proponowane rozwiązanie nie odpowiada moim potrzebom.
Clearification edit:
Chcę concate kilka skompresowanych pices HTML i wysłać je do przeglądarki jako jednej stronie, jak na żądanie: "Accept-Encoding: gzip", z respnse „Content-Encoding: gzip "
Jeśli strumień jest tak prosty jak cat a.gz b.gz >ab.gz
, silniki sieciowe Gecko (firefox) i KHTML pobierają tylko pierwszą część (a); IE6 nie wyświetla niczego, a Google Chrome wyświetla pierwszą część (a) poprawnie, a druga część (b) jako śmieci (w ogóle nie rozpakowuje).
Tylko Opera obsługuje tę funkcję.
Potrzebuję więc utworzyć pojedynczy strumień gzip o wartości i wysłać go bez ponownego kompresowania.
Aktualizacja: Znalazłem gzjoin.c w przykładach zlib, robi to za pomocą dekompresji. Problem polega na tym, że dekompresja jest jeszcze wolniejsza niż prosta.
Jest jeszcze szybsza 4 razy, a następnie najszybsza kompresja gzip. Ale to nie wystarczy.
Potrzebuję znaleźć dane, które muszę zapisać razem z plikiem gzip, aby nie uruchomić procedury dekompresyjnej i jak znaleźć te dane podczas kompresji.
Naprawdę chcesz je skompresować lub po prostu połączyć w jeden plik? –
Chcę utworzyć jeden skompresowany plik gzip/strumień/fragment pamięci dwóch innych skompresowanych plików gzip/strumieni/fragmentów pamięci bez ich dekompresji, utrwalając je i kompresując je ponownie. – Artyom
Zobacz wyjaśnienia w edycji. – Artyom