7-Zip là một công cụ nén và lưu trữ tệp phổ biến sử dụng định dạng lưu trữ riêng, được gọi là định dạng 7z. Được Igor Pavlov phát triển, định dạng 7z được thiết kế để cung cấp tỷ lệ nén cao, mã hóa mạnh và hỗ trợ nhiều phương pháp nén. Tài liệu giải thích kỹ thuật này sẽ đi sâu vào chi tiết về định dạng lưu trữ 7z, cấu trúc của nó và các kỹ thuật nén và mã hóa khác nhau mà nó sử dụng.
Định dạng 7z là một bộ chứa có thể lưu trữ nhiều tệp và thư mục, cùng với siêu dữ liệu của chúng, trong một tệp lưu trữ duy nhất. Nó hỗ trợ nén rắn, cho phép nén nhiều tệp với nhau, dẫn đến tỷ lệ nén tổng thể tốt hơn. Định dạng này cũng bao gồm các tính năng như nén tiêu đề, đa luồng và khả năng chia tệp lưu trữ thành nhiều ổ đĩa.
Cấu trúc của tệp lưu trữ 7z bao gồm ba phần chính: tiêu đề chữ ký, tiêu đề và các khối dữ liệu đã nén. Tiêu đề chữ ký là một chuỗi 6 byte xác định tệp là tệp lưu trữ 7z. Nó luôn bắt đầu bằng các byte '7z\xBC\xAF\x27\x1C'. Tiêu đề theo sau chữ ký và chứa thông tin cần thiết về tệp lưu trữ, chẳng hạn như phiên bản, số lượng tệp và các phương pháp nén được sử dụng.
Tiêu đề được chia thành nhiều phần phụ, bao gồm thuộc tính lưu trữ, thông tin luồng và thông tin tệp. Thuộc tính lưu trữ lưu trữ thông tin chung về tệp lưu trữ, chẳng hạn như số lượng tệp và thời gian tạo. Thông tin luồng chứa thông tin chi tiết về các khối dữ liệu đã nén, chẳng hạn như kích thước và các phương pháp nén được sử dụng. Thông tin tệp lưu trữ siêu dữ liệu cho từng tệp trong tệp lưu trữ, bao gồm tên tệp, kích thước và thuộc tính.
Một trong những tính năng chính của định dạng 7z là hỗ trợ nhiều phương pháp nén. Các phương pháp được sử dụng phổ biến nhất trong tệp lưu trữ 7z là LZMA (Thuật toán chuỗi Markov Lempel-Ziv) và LZMA2. LZMA là một thuật toán nén hiệu suất cao cung cấp tỷ lệ nén tuyệt vời, đặc biệt đối với các tệp văn bản và tệp thực thi. LZMA2 là phiên bản cải tiến của LZMA, cung cấp hỗ trợ đa luồng tốt hơn và tốc độ giải nén nhanh hơn.
Ngoài LZMA và LZMA2, định dạng 7z còn hỗ trợ các phương pháp nén khác, chẳng hạn như BZip2, PPMd và Delta. BZip2 là một thuật toán nén đa mục đích cung cấp tỷ lệ nén tốt cho nhiều loại tệp. PPMd là một phương pháp nén thống kê hoạt động tốt đối với các tệp văn bản và có thể đạt được tỷ lệ nén rất cao. Nén Delta được sử dụng để lưu trữ sự khác biệt giữa các tệp tương tự, có thể giảm đáng kể kích thước của tệp lưu trữ khi lưu trữ nhiều phiên bản của cùng một tệp.
Định dạng 7z cũng bao gồm các khả năng mã hóa mạnh mẽ để bảo vệ nội dung của tệp lưu trữ. Nó hỗ trợ thuật toán mã hóa AES-256, được coi là một trong những phương pháp mã hóa an toàn nhất hiện có. Khi một tệp lưu trữ được mã hóa, tất cả tên tệp, siêu dữ liệu và các khối dữ liệu đã nén đều được bảo vệ, khiến người dùng trái phép hầu như không thể truy cập nội dung của tệp lưu trữ nếu không có mật khẩu chính xác.
Để đảm bảo tính toàn vẹn của dữ liệu, định dạng 7z sử dụng kết hợp kiểm tra độ dư tuần hoàn (CRC) và giá trị băm SHA-256. Mỗi khối dữ liệu đã nén có một giá trị CRC được sử dụng để phát hiện và sửa lỗi trong quá trình giải nén. Ngoài ra, tiêu đề tệp lưu trữ và siêu dữ liệu tệp được bảo vệ bằng giá trị băm SHA-256, có thể được sử dụng để xác minh tính toàn vẹn của tệp lưu trữ và nội dung của nó.
Định dạng 7z cũng hỗ trợ tạo tệp lưu trữ tự giải nén (SFX). Tệp lưu trữ SFX là một tệp thực thi bao gồm dữ liệu đã nén và mã giải nén cần thiết. Khi chạy, tệp lưu trữ SFX sẽ tự động giải nén nội dung đến một vị trí đã chỉ định, mà không cần bất kỳ phần mềm bổ sung nào. Tính năng này giúp dễ dàng phân phối các tệp đã nén cho những người dùng có thể chưa cài đặt công cụ giải nén tương thích.
Một trong những ưu điểm của định dạng 7z là kiến trúc mở của nó, cho phép các nhà phát triển tạo các công cụ và thư viện tương thích. Bản thân phần mềm 7-Zip là mã nguồn mở và mã nguồn của nó có sẵn theo Giấy phép Công cộng Ít hơn GNU (LGPL). Điều này đã dẫn đến sự phát triển của nhiều công cụ và plugin của bên thứ ba có thể tạo, giải nén và thao tác các tệp lưu trữ 7z.
Tóm lại, định dạng tệp lưu trữ 7z là một bộ chứa nén mạnh mẽ và linh hoạt, cung cấp tỷ lệ nén cao, mã hóa mạnh và hỗ trợ nhiều phương pháp nén. Các tính năng tiên tiến của nó, chẳng hạn như nén rắn, đa luồng và tệp lưu trữ tự giải nén, khiến nó trở thành một lựa chọn hấp dẫn cho cả người dùng cá nhân và môi trường doanh nghiệp. Khi định dạng tiếp tục phát triển và cải tiến, nó có khả năng vẫn là một lựa chọn phổ biến để nén và lưu trữ tệp.
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.