PKZ lưu trữ định dạng là một định dạng lưu trữ nén độc quyền được phát triển bởi PKWARE, Inc. để đóng gói và nén các tệp và thư mục. Nó thường được sử dụng trên các hệ thống Microsoft Windows nhưng cũng có thể được sử dụng trên các nền tảng khác. Định dạng này sử dụng kết hợp nén DEFLATE và nhiều bộ lọc tiền xử lý khác nhau để đạt được tỷ lệ nén cao trong khi cân bằng tốc độ và mức sử dụng bộ nhớ.
Lưu trữ PKZ bao gồm một loạt 'tiêu đề tệp cục bộ' cho mỗi tệp, tiêu đề giải mã/mã hóa lưu trữ tùy chọn, khối dữ liệu tệp nén, cấu trúc thư mục trung tâm và bản ghi kết thúc thư mục trung tâm. Điều này cho phép truy cập nhanh vào các tệp nén riêng lẻ, mã hóa tùy chọn, kiểm tra tính toàn vẹn dữ liệu và khả năng lưu trữ siêu dữ liệu về các tệp đã lưu trữ.
Mỗi tiêu đề tệp cục bộ chứa thông tin về tệp như tên, kích thước, dấu thời gian, tổng kiểm tra CRC-32 và phương pháp nén được sử dụng. Tiêu đề cũng chỉ định bất kỳ tính năng tùy chọn nào được áp dụng cho tệp như mã hóa, bộ lọc tiền xử lý, vá lỗi hoặc trải rộng dữ liệu trên nhiều lưu trữ. Tiêu đề cục bộ được theo sau bởi dữ liệu tệp nén hoặc đã lưu trữ.
PKZ hỗ trợ một số phương pháp nén, trong đó DEFLATE là phương pháp phổ biến nhất. DEFLATE là một thuật toán nén dữ liệu không mất dữ liệu kết hợp nén LZ77 và mã hóa Huffman. PKZIP cũng có thể lưu trữ các tệp không nén nếu muốn. Hiếm khi, các phương pháp nén cũ khác có thể được sử dụng, chẳng hạn như LZMA hoặc Bzip2.
Trước khi nén tệp bằng DEFLATE, có thể áp dụng nhiều bộ lọc tiền xử lý khác nhau để cải thiện khả năng nén. Chúng bao gồm các phương pháp như giảm kích thước ký hiệu, hoán đổi byte để tăng độ dư thừa, bộ lọc BCJ cho các tệp thực thi và bộ lọc delta cho các bản cập nhật gia tăng hoặc vá lỗi. Các bộ lọc được áp dụng như một phần của quá trình nén trước khi dữ liệu được truyền đến bộ nén DEFLATE.
Để xác thực tính toàn vẹn dữ liệu, mỗi tệp ghi lại tổng kiểm tra CRC-32 của dữ liệu chưa nén trong tiêu đề cục bộ của nó. Tổng kiểm tra tương tự được ghi lại trong mục thư mục trung tâm cho tệp. Điều này cho phép xác minh rằng tệp đã được nén và giải nén chính xác mà không bị hỏng dữ liệu.
Lưu trữ PKZ có thể tùy chọn mã hóa dữ liệu tệp và tiêu đề bằng cách sử dụng mã hóa đối xứng. Các phiên bản cũ hơn sử dụng ZipCrypto, trong khi các phiên bản mới hơn sử dụng mã hóa AES. Khi mã hóa, phương pháp mã hóa được chọn được ghi lại trong lưu trữ và mỗi tệp có thể chỉ định mật khẩu riêng của mình. Mã hóa được xác thực được sử dụng để phát hiện bất kỳ sự giả mạo hoặc hỏng hóc nào của dữ liệu được mã hóa.
Thư mục trung tâm theo sau dữ liệu tệp nén và đóng vai trò như mục lục cho lưu trữ. Nó chứa mục tiêu đề tệp cho mỗi tệp có siêu dữ liệu, bù vào tiêu đề cục bộ và thông tin khác cần thiết để giải nén tệp. Các mục được sắp xếp theo tên tệp. Có thể áp dụng chữ ký số tùy chọn cho thư mục trung tâm để bảo vệ thêm chống giả mạo.
Cuối cùng, bản ghi kết thúc thư mục trung tâm đánh dấu phần cuối của tệp lưu trữ. Nó lưu trữ số mục trong thư mục trung tâm, kích thước và bù của nó và một trường chú thích. Đối với các lưu trữ được chia thành nhiều tệp, nó cũng chứa thông tin về cách xác định vị trí các tệp lưu trữ khác.
Định dạng PKZ cho phép truy cập ngẫu nhiên hiệu quả vào các tệp riêng lẻ trong một lưu trữ mà không cần phải giải nén toàn bộ lưu trữ. Điều này được thực hiện bằng cách đọc thư mục trung tâm, xác định vị trí mục tệp mong muốn, sau đó đọc và giải nén khối tệp cục bộ cụ thể từ bù của nó. Một số tệp cũng có thể được mở và giải nén cùng một lúc.
Để tạo lưu trữ PKZ, các tệp trước tiên được lọc và nén riêng lẻ thành các khối tệp cục bộ. Các mục thư mục trung tâm được tạo từ các tiêu đề cục bộ và siêu dữ liệu tệp. Sau đó, thư mục trung tâm được ký số nếu cần. Cuối cùng, bản ghi kết thúc thư mục trung tâm được ghi trỏ đến thư mục trung tâm.
Giải nén lưu trữ PKZ bắt đầu bằng cách đọc phần cuối của thư mục trung tâm để xác định vị trí các mục thư mục trung tâm. Các mục tệp mong muốn được tìm thấy và mỗi mục được giải nén bằng cách đọc tiêu đề cục bộ và dữ liệu nén từ các bù được chỉ định. Bất kỳ mã hóa nào cũng bị xóa và các bộ lọc đã xử lý trước được đảo ngược để lấy nội dung tệp gốc.
Một số tính năng khác của định dạng PKZ bao gồm: chia lưu trữ thành nhiều tệp, ổ đĩa hoặc phân đoạn; hỗ trợ tên tệp Unicode; quyền và thuộc tính hệ thống tệp NTFS; chức năng cập nhật/vá lỗi tích hợp; và siêu dữ liệu có thể mở rộng như chữ ký số, bản tóm tắt băm và dữ liệu cụ thể của ứng dụng.
Nhìn chung, định dạng PKZ là một định dạng lưu trữ hi ệu quả và linh hoạt để nén và đóng gói các tệp. Khả năng nén các tệp riêng lẻ, áp dụng các bộ lọc tiền xử lý và nhanh chóng trích xuất các tệp cụ thể mà không cần xử lý toàn bộ lưu trữ làm cho nó phù hợp để đóng gói trình cài đặt phần mềm, bản cập nhật chương trình cơ sở, tài liệu, v.v. Hỗ trợ mã hóa, kiểm tra tính toàn vẹn dữ liệu và chữ ký số cũng cho phép nó cung cấp mức bảo mật cao khi cần.
Nén tệp giảm độ dư thừa để cùng một lượng thông tin sử dụng ít bit hơn. Giới hạn trên được quyết định bởi lý thuyết thông tin: với nén không mất dữ liệu, giới hạn là entropy của nguồn (xem định lý mã nguồn của Shannon source coding theorem và bài báo gốc năm 1948 “A Mathematical Theory of Communication”). Với nén mất dữ liệu, sự đánh đổi giữa bitrate và chất lượng được mô tả bởi lý thuyết rate–distortion.
Hầu hết bộ nén có hai giai đoạn. Đầu tiên một mô hình dự đoán hoặc lộ ra cấu trúc trong dữ liệu. Sau đó một bộ mã biến các dự đoán đó thành mẫu bit gần tối ưu. Gia đình kinh điển là Lempel–Ziv LZ77 (1977) và LZ78 (1978) phát hiện chuỗi lặp rồi phát các tham chiếu thay vì byte thô. Ở phía mã hóa mã Huffman (bài gốc 1952) gán mã ngắn hơn cho ký hiệu có xác suất cao. Mã hóa số học và range coding tiến gần hơn nữa tới giới hạn entropy, trong khi Asymmetric Numeral Systems (ANS) hiện đại đạt được tỷ lệ tương tự với các bảng tra cứu nhanh.
DEFLATE (dùng bởi gzip, zlib, ZIP) kết hợp LZ77 và Huffman. Đặc tả đều mở: DEFLATE RFC 1951, lớp bọc zlib RFC 1950và định dạng gzip RFC 1952. Gzip được thiết kế cho streaming và không cung cấp truy cập ngẫu nhiên. PNG chuẩn hóa DEFLATE là phương pháp duy nhất (cửa sổ tối đa 32 KiB) theo đặc tả “Compression method 0…” và W3C/ISO PNG 2nd Edition.
Zstandard (zstd): bộ nén đa dụng mới cung cấp tỷ lệ cao và giải nén cực nhanh. Định dạng có trong RFC 8878 (cùng bản HTML) và đặc tả tham chiếu trên GitHub. Như gzip, frame cơ bản không nhắm tới truy cập ngẫu nhiên. Siêu năng lực của zstd là từ điển: mẫu nhỏ từ tập dữ liệu giúp hàng loạt tệp nhỏ/giống nhau nén tốt hơn (xem tài liệu python-zstandard và ví dụ của Nigel Tao). Triển khai hỗ trợ cả từ điển “unstructured” lẫn “structured” (thảo luận).
Brotli: tối ưu cho nội dung web (font WOFF2, HTTP). Kết hợp từ điển tĩnh và lõi LZ+entropy giống DEFLATE. Đặc tả là RFC 7932, mô tả cửa sổ 2WBITS−16 với WBITS [10, 24] (1 KiB−16 B tới 16 MiB−16 B) và rằng nó không cung cấp truy cập ngẫu nhiên. Brotli thường vượt gzip trên văn bản web và giải nén nhanh.
Vỏ chứa ZIP: ZIP là kho tệp có thể lưu nhiều phương pháp nén (deflate, store, zstd...). Chuẩn thực tế là APPNOTE của PKWARE (xem cổng APPNOTE, bản lưu trữvà tóm tắt của LC ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 ưu tiên tốc độ tuyệt đối với tỷ lệ vừa phải. Xem trang dự án và định dạng frame. Lý tưởng cho cache trong RAM, telemetri hoặc đường nóng cần giải nén gần tốc độ bộ nhớ.
XZ / LZMA hướng đến mật độ cao (tỷ lệ tốt) với thời gian nén chậm hơn. XZ là vỏ chứa; công việc chính do LZMA/LZMA2 (mô hình LZ77 + range coding) đảm nhiệm. Xem định dạng .xz, đặc tả LZMA (Pavlov)và ghi chú kernel Linux về XZ Embedded. XZ thường nén tốt hơn gzip và cạnh tranh với codec hiện đại, nhưng mã hóa lâu hơn.
bzip2 dùng Biến đổi Burrows–Wheeler (BWT), move-to-front, RLE và Huffman. Thường nhỏ hơn gzip nhưng chậm hơn; xem hướng dẫn chính thức và trang man (Linux).
Kích thước “cửa sổ” rất quan trọng. Tham chiếu DEFLATE chỉ nhìn lại 32 KiB (RFC 1951) và giới hạn 32 KiB của PNG được nêu ở đây. Brotli hỗ trợ cửa sổ từ ~1 KiB đến 16 MiB (RFC 7932). Zstd điều chỉnh cửa sổ và độ sâu tìm kiếm theo level (RFC 8878). Dòng cơ sở của gzip/zstd/brotli hướng tới giải nén tuần tự; bản thân định dạng không hứa truy cập ngẫu nhiên, nhưng các vỏ chứa (tar có chỉ mục, framing theo khối, chỉ mục chuyên biệt) có thể bổ sung.
Các định dạng trên là lossless: bạn khôi phục đúng byte ban đầu. Codec media thường lossy: loại bỏ chi tiết khó nhận biết để giảm bitrate. Với ảnh, JPEG cổ điển (DCT, lượng tử hóa, mã entropy) được chuẩn hóa trong ITU-T T.81 / ISO/IEC 10918-1. Với âm thanh, MP3 (MPEG-1 Layer III) và AAC (MPEG-2/4) dùng mô hình cảm nhận và biến đổi MDCT (xem ISO/IEC 11172-3, ISO/IEC 13818-7và tổng quan MDCT tại đây). Lossy và lossless có thể cùng tồn tại (ví dụ PNG cho UI, codec web cho ảnh/video/audio).
Lý thuyết Shannon 1948 · Rate–distortion · Mã hóa Huffman 1952 · Mã số học · Range coding · ANS. Định dạng DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · định dạng XZ. Chuỗi BWT Burrows–Wheeler (1994) · hướng dẫn bzip2. Media JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Tóm lại: hãy chọn bộ nén phù hợp dữ liệu và ràng buộc của bạn, đo trên d ữ liệu thực và đừng quên lợi ích từ từ điển cùng cách đóng gói thông minh. Khi ghép đúng, bạn sẽ có tệp nhỏ hơn, truyền nhanh hơn và ứng dụng phản hồi hơn mà không hy sinh độ chính xác hay tính di động.
Nén file là quá trình giảm kích thước của một file hoặc các file, thường để tiết kiệm không gian lưu trữ hoặc tăng tốc độ truyền trên mạng.
Nén file hoạt động bằng cách xác định và loại bỏ sự trùng lặp trong dữ liệu. Nó sử dụng thuật toán để mã hóa dữ liệu gốc trong một không gian nhỏ hơn.
Hai loại chính của nén file là nén lossless và lossy. Nén lossless cho phép phục hồi hoàn toàn file gốc, trong khi nén lossy cho phép giảm kích thước đáng kể hơn nhưng có thể mất một phần chất lượng dữ liệu.
Một ví dụ phổ biến về công cụ nén file là WinZip, hỗ trợ nhiều định dạng nén bao gồm ZIP và RAR.
Với nén lossless, chất lượng không thay đổi. Tuy nhiên, với nén lossy, c ó thể có sự giảm chất lượng rõ rệt do nó loại bỏ dữ liệu ít quan trọng để giảm kích thước file đáng kể hơn.
Có, nén file an toàn về mặt tính toàn vẹn của dữ liệu, đặc biệt với nén lossless. Tuy nhiên, giống như bất kỳ file nào, file nén có thể bị mục tiêu bởi malware hoặc virus, vì vậy luôn quan trọng khi có phần mềm bảo mật uy tín.
Hầu như tất cả các loại file đều có thể được nén, bao gồm file văn bản, hình ảnh, audio, video và file phần mềm. Tuy nhiên, mức độ nén có thể thực hiện đáng kể có thể thay đổi giữa các loại file khác nhau.
ZIP file là một loại định dạng file sử dụng nén lossless để giảm kích thước của một hoặc nhiều file. Nhiều file trong một ZIP file effectively được gói lại thành một file duy nhất, điều này cũng giúp việc chia sẻ dễ dàng hơn.
Về mặt kỹ thuật, có, mặc dù việc giảm kích thước thêm có thể tối thiểu hoặc thậm chí phản tác dụng. Nén một file đã được nén đôi khi có thể tăng kích thước do metadata được thêm vào bởi thuật toán nén.
Để giải nén một file, bạn thường cần một công cụ giải nén hoặc giải nén, như WinZip hoặc 7-Zip. Những công cụ này có thể trích xuất các file gốc từ định dạng nén.