Trang chủ » làm thế nào để » Tại sao Zip có thể nén các tệp đơn tốt hơn nhiều tệp có cùng nội dung?

    Tại sao Zip có thể nén các tệp đơn tốt hơn nhiều tệp có cùng nội dung?

    Có thể nén các tệp của chúng tôi để chia sẻ và / hoặc vận chuyển chúng dễ dàng hơn có thể giúp cuộc sống điện tử của chúng tôi dễ dàng hơn nhiều, nhưng đôi khi chúng tôi có thể thấy kết quả kích thước kỳ lạ hoặc bất ngờ sau khi chúng tôi nén chúng. Tại sao vậy? Bài hỏi và trả lời của SuperUser hôm nay có câu trả lời cho câu hỏi của người đọc bối rối.

    Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.

    Hình ảnh lịch sự của Jean-Etienne Minh-Duy Poirrier (Flickr).

    Câu hỏi

    Trình đọc SuperUser sixty feetersdude muốn biết tại sao zip có thể nén các tệp đơn tốt hơn nhiều tệp có cùng loại nội dung:

    Giả sử rằng tôi có 10.000 tệp XML và muốn gửi chúng cho bạn bè. Trước khi gửi chúng, tôi muốn nén chúng.

    Phương pháp 1: Không nén chúng

    Các kết quả:

    Phương pháp 2: Zip mỗi tệp riêng biệt và gửi cho anh ta 10.000 tệp XML đã nén

    Chỉ huy:

    Các kết quả:

    Phương pháp 3: Tạo một tệp Zip duy nhất chứa tất cả 10.000 tệp XML

    Chỉ huy:

    Các kết quả:

    Phương pháp 4: Ghép các tệp thành một tệp duy nhất và nén tệp

    Chỉ huy:

    Các kết quả:

    Câu hỏi

    • Tại sao tôi nhận được kết quả tốt hơn đáng kể như vậy khi tôi chỉ nén một tệp duy nhất?
    • Tôi đã mong đợi để có được kết quả tốt hơn đáng kể bằng cách sử dụng phương pháp 3 thay vì phương pháp 2, nhưng tôi thì không. Tại sao lại thế này?
    • Là hành vi này cụ thể để zip? Nếu tôi đã thử sử dụng Gzip, tôi sẽ nhận được các kết quả khác nhau?

    Thông tin bổ sung

    Metadata

    Một trong những câu trả lời cho thấy sự khác biệt là dữ liệu meta hệ thống được lưu trữ trong tệp zip. Tôi không tin rằng đây có thể là trường hợp. Để kiểm tra nó, tôi đã làm như sau:

    Tệp zip kết quả là 1,4 MB. Điều này có nghĩa là vẫn còn khoảng mười MB không gian không giải thích được.

    Tại sao zip có thể nén các tệp đơn tốt hơn nhiều tệp có cùng loại nội dung?

    Câu trả lời

    Những người đóng góp cho SuperUser Alan Shutko và Aganju có câu trả lời cho chúng tôi. Đầu tiên, Alan Shutko:

    Nén zip dựa trên các mẫu lặp đi lặp lại trong dữ liệu sẽ được nén và quá trình nén sẽ tốt hơn khi tệp càng dài, vì càng có thể tìm thấy và sử dụng các mẫu dài hơn.

    Đơn giản hóa, nếu bạn nén một tệp, từ điển ánh xạ mã (ngắn) thành các mẫu (dài hơn) nhất thiết phải có trong mỗi tệp zip kết quả; nếu bạn nén một tệp dài, từ điển sẽ được 'sử dụng lại' và thậm chí còn hiệu quả hơn trên tất cả nội dung.

    Nếu các tệp của bạn thậm chí hơi giống nhau (như văn bản luôn luôn), việc sử dụng lại 'từ điển' sẽ trở nên rất hiệu quả và kết quả là tổng tệp zip nhỏ hơn nhiều.

    Tiếp theo là câu trả lời từ Aganju:

    Trong zip, mỗi tệp được nén riêng. Ngược lại là nén rắn, đó là các tập tin được nén lại với nhau 7-zip và Rar sử dụng nén rắn theo mặc định. Gzip và Bzip2 không thể nén nhiều tệp, do đó Tar được sử dụng trước tiên, có tác dụng tương tự như nén rắn.

    Vì các tệp xml có cấu trúc tương tự (và có thể có nội dung tương tự), nếu các tệp được nén cùng nhau thì độ nén sẽ cao hơn.

    Ví dụ: nếu một tập tin chứa chuỗiMáy nén và máy nén đã tìm thấy chuỗi đó trong một tệp khác, nó sẽ thay thế nó bằng một con trỏ nhỏ cho khớp trước đó. Nếu máy nén không sử dụng nén rắn, lần xuất hiện đầu tiên của chuỗi trong tệp sẽ được ghi lại dưới dạng nghĩa đen, cái nào lớn hơn.


    Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.