Dưới đây là năm cách với gzip, ba cách cần một chỉ mục, hai không.
Có thể tạo chỉ mục cho bất kỳ tệp gzip nào, tức là không được xây dựng đặc biệt, như được thực hiện bởi zran.c. Sau đó, bạn có thể bắt đầu giải nén tại các ranh giới khối. Chỉ mục này bao gồm 32K lịch sử dữ liệu chưa nén tại mỗi điểm vào.
Nếu bạn đang xây dựng tệp gzip, sau đó nó có thể được thực hiện với các điểm nhập định kỳ có chỉ mục không cần lịch sử không nén tại các điểm nhập đó, làm cho chỉ mục nhỏ hơn. Điều này được thực hiện với tùy chọn Z_FULL_FLUSH
tới deflate()
trong zlib.
Bạn cũng có thể thực hiện Z_SYNC_FLUSH
theo sau là Z_FULL_FLUSH
tại mỗi điểm như vậy, sẽ chèn hai điểm đánh dấu. Sau đó, bạn có thể tìm kiếm mẫu chín byte 00 00 ff ff 00 00 00 ff ff
để tìm mẫu đó. Điều đó không khác gì so với việc tìm kiếm điểm đánh dấu sáu byte trong các tệp bzip2, ngoại trừ một kết quả dương tính giả ít có khả năng hơn với chín byte. Sau đó, bạn không cần tệp chỉ mục riêng biệt.
Cả gzip lẫn xz đều hỗ trợ ghép nối đơn giản. Điều này cho phép bạn dễ dàng chuẩn bị một kho lưu trữ để giải nén song song theo một cách khác. Tóm lại:
gzip <a> a.gz
gzip <b> b.gz
cat a.gz b.gz > c.gz
gunzip <c.gz> c
cat a b | cmp - c
sẽ dẫn đến so sánh thành công.
Sau đó, bạn có thể chỉ cần nén theo các khối có kích thước mong muốn và nối các kết quả. Lưu chỉ mục vào phần bù của đầu mỗi luồng gzip. Giải nén từ những offsets. Bạn có thể chọn kích thước của các khối theo sở thích của bạn, tùy thuộc vào ứng dụng của bạn. Tuy nhiên, nếu bạn làm cho chúng quá nhỏ, việc nén sẽ bị ảnh hưởng.
Với việc ghép nối đơn giản các tệp gzip, bạn cũng có thể từ bỏ chỉ mục nếu bạn tạo từng đoạn một kích thước cố định không nén. Sau đó, mỗi đoạn kết thúc với cùng bốn byte, độ dài không nén theo thứ tự nhỏ, ví dụ: 00 00 10 00
cho 1 đoạn MiB, tiếp theo là 1f 8b 08
từ đoạn tiếp theo, đây là phần đầu của tiêu đề gzip. Sau đó, đánh dấu bảy byte đó có thể được tìm kiếm giống như dấu bzip2, mặc dù lại có xác suất sai tích cực nhỏ hơn.
Điều tương tự có thể được thực hiện với các tệp xz ghép nối, có tiêu đề là bảy byte: fd 37 7a 58 5a 00 00
.
Tôi thích LZ4 hơn những ngày này. –
khiến bạn ngạc nhiên khi rời khỏi Zlib. – nikk