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

Mục lục:

Tại sao Zip có khả năng 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ó khả năng nén các tệp đơn tốt hơn nhiều tệp có cùng nội dung?

Video: Tại sao Zip có khả năng nén các tệp đơn tốt hơn nhiều tệp có cùng nội dung?

Video: Tại sao Zip có khả năng nén các tệp đơn tốt hơn nhiều tệp có cùng nội dung?
Video: Apple Watch Sẽ Cực Kỳ Bất Tiện Nếu Không Biết 9 Thủ Thuật Này... - YouTube 2024, Tháng tư
Anonim
Có thể nén các tệp của chúng tôi để chia sẻ và / hoặc 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 lạ hoặc không mong muốn sau khi chúng tôi nén chúng. Tại sao vậy? Bài đăng Hỏi và Đáp của SuperUser hôm nay có câu trả lời cho câu hỏi của người đọc bị nhầm lẫn.
Có thể nén các tệp của chúng tôi để chia sẻ và / hoặc 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 lạ hoặc không mong muốn sau khi chúng tôi nén chúng. Tại sao vậy? Bài đăng Hỏi và Đáp của SuperUser hôm nay có câu trả lời cho câu hỏi của người đọc bị nhầm lẫn.

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

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

Câu hỏi

Trình đọc siêu người dùng Sixtyfootersdude muốn biết lý do 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:

Suppose that I have 10,000 XML files and want to send them to a friend. Before sending them, I would like to compress them.

Method 1: Do Not Compress Them

Results:

Image
Image

Method 2: Zip Every File Separately and Send Him 10,000 Zipped XML Files

Command:

Results:
Results:
Image
Image

Method 3: Create a Single Zip File Containing All 10,000 XML Files

Command:

Results:
Results:
Image
Image

Method 4: Concatenate the Files Into a Single File and Zip It

Command:

Results:
Results:
Image
Image

Questions

  • Why do I get such dramatically better results when I am just zipping a single file?
  • I was expecting to get drastically better results using method 3 rather than method 2, but I do not. Why is this?
  • Is this behaviour specific to zip? If I tried using Gzip, would I get different results?

Additional Info

Image
Image

Meta Data

One of the answers given suggests that the difference is the system meta data that is stored in the zip file. I do not believe that this can be the case. To test it, I did the following:

The resulting zip file is 1.4 MB. This means that there is still approximately ten MB of unexplained space.
The resulting zip file is 1.4 MB. This means that there is still approximately ten MB of unexplained space.

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 của SuperUser Alan Shutko và Aganju có câu trả lời cho chúng tôi. Đầu tiên, Alan Shutko:

Zip compression is based on repetitive patterns in the data to be compressed, and the compression gets better the longer the file is, as more and longer patterns can be found and used.

Simplified, if you compress one file, the dictionary that maps (short) codes to (longer) patterns is necessarily contained in each resulting zip file; if you zip one long file, the dictionary is ‘reused’ and grows even more effective across all content.

If your files are even a bit similar (as text always is), reuse of the ‘dictionary’ becomes very efficient and the result is a much smaller total zip file.

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

In zip, each file is compressed separately. The opposite is solid compression, that is, files are compressed together. 7-zip and Rar use solid compression by default. Gzip and Bzip2 cannot compress multiple files, so Tar is used first, having the same effect as solid compression.

As xml files have similar structure (and probably similar content), if the files are compressed together then the compression will be higher.

For example, if a file contains the string “” and the compressor has already found that string in another file, it will replace it with a small pointer to the previous match. If the compressor does not use solid compression, the first occurrence of the string in the file will be recorded as a literal, which is larger.

Có 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 có hiểu biết công nghệ khác? Xem toàn bộ chuỗi thảo luận tại đây.

Đề xuất: