Câu hỏi Tại sao tệp zip xuất hiện lớn hơn tệp nguồn, đặc biệt khi nó là văn bản?


Tôi có một tệp văn bản có kích thước 19 byte và đã nén tệp bằng cách sử dụng zip và 7zip, tệp có vẻ lớn hơn. Tôi đã đọc một câu hỏi về Tại sao tệp 7zipped lớn hơn tệp thô? cũng như Tại sao ZIP nén không nén gì? nhưng xem xét các tập tin không phải là đã nén tôi đã có thể mong đợi thêm nén. Đính kèm là ảnh chụp màn hình.

enter image description here

EDIT0

Tôi lấy ví dụ thêm bằng cách tạo một tệp chứa dữ liệu ngẫu nhiên như sau dd if=/dev/urandom of=sample.log bs=1G count=1 và cố gắng nén tệp bằng cả zip và 7zip tuy nhiên không có mức tăng nén nào. Tại sao vậy?

enter image description here


4
2017-08-29 06:39


gốc


Và đó là một tệp nhật ký 1GB thuần túy? - CyberSkull
@CyberSkull - Đúng vậy. - PeanutsMonkey
Bạn có thể vui lòng cho chúng tôi biết thông số zip của bạn là gì không? Tôi sẽ làm một cái gì đó như zip -9T "example.zip" sample.log (-t chỉ để kiểm tra tính toàn vẹn của tệp lưu trữ.). - CyberSkull
Dữ liệu ngẫu nhiên từ / dev / urandom không không phải tạo ra một tập tin văn bản thực sự; nó sẽ không nén tốt chút nào. Các byte văn bản được giới hạn trong phạm vi, với nhiều khoảng trắng và các mẫu lặp lại (ví dụ: "th" và "sp") và các từ. Bạn có trong thực tế tạo ra một tập tin nhị phân ngẫu nhiên. - Ken
@CyberSkull: Không, bạn có một dòng ngẫu nhiên các ký tự ASCII. Đó là một chút nén hơn nhị phân ngẫu nhiên, nhưng vẫn còn hư không gần như cấu trúc như văn bản. - Ben Voigt


Các câu trả lời:


Như @kinokijuf cho biết, có một tiêu đề tập tin. Nhưng để mở rộng khi có một vài điều khác để hiểu về việc nén tệp.

Tiêu đề zip chứa tất cả thông tin cần thiết để xác định loại tệp (số ma thuật), phiên bản zip và cuối cùng là danh sách tất cả các tệp được bao gồm trong lưu trữ.

Tệp của bạn có thể chưa được nén. Nếu bạn chạy unzip -l example.zip có thể bạn sẽ thấy rằng kích thước tệp không thay đổi. 19 byte có thể sẽ tạo ra nhiều chi phí hơn sẽ được lưu nếu nó được nén ở tất cả bởi DEFLATE (phương pháp nén chính được sử dụng bởi zip).

Trong các trường hợp khác, hình ảnh PNG chẳng hạn, chúng đã được nén nên zip sẽ chỉ lưu trữ chúng. DEFLATE sẽ không bận tâm việc nén bất kỳ thứ gì đã được nén.

Mặt khác, nếu bạn có nhiều tệp văn bản và kích thước của chúng lớn hơn vài kilobyte, bạn sẽ nhận được nhiều tiền tiết kiệm bằng cách đặt tất cả chúng vào Độc thân kho lưu trữ zip.

Bạn sẽ nhận được khoản tiết kiệm tốt nhất khi nén dữ liệu được định dạng rất thường xuyên, như một tệp văn bản có chứa kết xuất SQL. Ví dụ, tôi đã từng có một bãi chứa một cơ sở dữ liệu SQL nhỏ khoảng 13MB. Tôi đã chạy zip -9 dump.sql dump.zip trên nó và kết thúc với khoảng 1MB sau đó.

Một yếu tố khác là mức độ nén của bạn. Nhiều trình lưu trữ theo mặc định sẽ chỉ nén ở mức trung bình, cho tốc độ giảm. Khi nén bằng zip, hãy thử -9 cờ để nén tối đa (Tôi nghĩ rằng hướng dẫn 3.x nói rằng mức độ nén chỉ được hỗ trợ bởi DEFLATE tại thời điểm này).

TL; DR

Chi phí cho lưu trữ vượt quá bất kỳ lợi ích nào bạn có thể đã nhận được để nén tệp. Hãy thử đặt các tệp văn bản lớn hơn vào đó và xem những gì bạn nhận được. Sử dụng -v gắn cờ khi nén để xem tiền tiết kiệm của bạn khi bạn đi.


7
2017-08-29 07:08



Khi bạn nói kích thước tập tin là không thay đổi nếu tôi giải nén nó, bạn có nghĩa là kích thước của kho lưu trữ? Thứ hai, nếu tôi sử dụng một phương pháp nén khác với DEFLATE như PPMD, nó sẽ tạo sự khác biệt? Vì vậy, khi bạn nói -V cờ bạn có nghĩa là khi tôi thực hiện zip chỉ huy? - PeanutsMonkey
Ngoài ra, khi bạn nói loại tệp bạn có nghĩa là loại tệp nguồn, ví dụ: văn bản, MP3, v.v ...? - PeanutsMonkey


Vì chi phí của tiêu đề .zip là đường lớn hơn 19 byte.


4
2017-08-29 06:43



Điều này ảnh hưởng như thế nào đến các tệp văn bản lớn hơn? - PeanutsMonkey


Nén loại bỏ thông tin thừa, xuất hiện khi dữ liệu được cấu trúc cao.

Từ điều này, rõ ràng là các tệp đã nén không thể nén thêm được nữa, vì dự phòng đã biến mất, nhưng dữ liệu ngẫu nhiên sẽ không nén tốt, vì nó không bao giờ có cấu trúc hoặc dự phòng.

Có toàn bộ khoa học, lý thuyết thông tin, đề cập đến việc đo mật độ thông tin (và thông tin lẫn nhau) và sử dụng dự phòng và cấu trúc để thực hiện nén, tấn công mã hóa và phát hiện lỗi và phục hồi.


1
2018-05-28 19:27