Tôi muốn kết hợp hai hoặc nhiều luồng gzip mà không cần nén lại chúng.Cách kết hợp hai hoặc nhiều tệp gzip/luồng
Ý tôi là tôi đã nén thành A.gz và B thành B.gz, tôi muốn nén chúng thành một gzip đơn (A + B) .gz mà không nén lại một lần nữa, sử dụng C hoặc C++.
Một số lưu ý:
- Thậm chí bạn có thể chỉ concat hai tập tin và gunzip sẽ biết làm thế nào để đối phó với họ, hầu hết các chương trình sẽ không thể để đối phó với hai khối.
- Tôi đã từng thấy một ví dụ về mã thực hiện điều này bằng cách giải nén các tệp và sau đó thao tác gốc và nén lại nhanh hơn bình thường, nhưng vẫn yêu cầu hoạt động CPU O (n).
- Bất hạnh Tôi không thể tìm thấy ví dụ này tôi đã tìm thấy một lần (nối bằng cách sử dụng giải nén chỉ), nếu ai đó có thể chỉ nó tôi sẽ rất tuyệt vời.
Lưu ý: nó không trùng lặp với this vì giải pháp được đề xuất không phù hợp với nhu cầu của tôi.
Clearification chỉnh sửa:
Tôi muốn concate nhiều pices HTML nén và gửi chúng đến trình duyệt như một trang, theo yêu cầu: "Accept-Encoding: gzip", với respnse "Content-Encoding: gzip "
Nếu luồng được concated đơn giản như cat a.gz b.gz >ab.gz
, Gecko (firefox) và công cụ web KHTML chỉ nhận được phần đầu tiên (a); IE6 không hiển thị bất cứ thứ gì và Google Chrome hiển thị phần đầu tiên (a) một cách chính xác và phần thứ hai (b) làm rác (không giải nén).
Chỉ Opera xử lý tốt điều này.
Vì vậy, tôi cần tạo một luồng gzip duy nhất của nhiều đoạn và gửi chúng mà không cần nén lại.
Cập nhật: Tôi đã tìm thấy gzjoin.c trong ví dụ về zlib, nó chỉ sử dụng giải nén. Vấn đề là giải nén vẫn chậm hơn chúng đơn giản memcpy
.
Nó vẫn nhanh hơn 4 lần sau đó nén gzip nhanh nhất. Nhưng nó không phải là đủ.
Điều tôi cần là tìm dữ liệu tôi cần lưu cùng với tệp gzip để không chạy quy trình giải nén và làm cách nào để tìm dữ liệu này trong quá trình nén.
Bạn có thực sự muốn nén chúng hoặc chỉ ghép chúng vào cùng một tệp không? –
Tôi muốn tạo một tệp nén/luồng/bộ nhớ nén của hai tệp nén/luồng/bộ nhớ nén khác của gzip mà không giải nén chúng, đồng bộ hóa chúng và nén chúng lại một lần nữa. – Artyom
Xem phần giải thích trong bản chỉnh sửa. – Artyom