LHA lưu tr ữ định dạng, còn được gọi là LZH, là một định dạng tệp lưu trữ nén chủ yếu được sử dụng trên hệ thống MS-DOS và Microsoft Windows. Nó được Haruyasu Yoshizaki phát triển vào cuối những năm 1980 như một cải tiến so với các định dạng nén ARC và ZIP hiện có. Lưu trữ LHA cung cấp tỷ lệ nén hiệu quả và tốc độ giải nén nhanh, khiến chúng phù hợp để lưu trữ và phân phối phần mềm, tài liệu và các loại tệp khác.
Định dạng LHA sử dụng kết hợp các thuật toán mã hóa Lempel-Ziv-Welch (LZW) và Huffman để đạt được tỷ lệ nén cao. LZW là một thuật toán nén dựa trên từ điển thay thế các lần xuất hiện dữ liệu lặp lại bằng các tham chiếu đến một từ điển được xây dựng khi dữ liệu đang được nén. Ngược lại, mã hóa Huffman là một lược đồ mã hóa độ dài biến đổi, gán các chuỗi bit ngắn hơn cho các ký hiệu thường xuyên hơn, do đó giảm kích thước tổng thể của dữ liệu đã nén.
Một lưu trữ LHA bao gồm một loạt các tiêu đề và các khối dữ liệu đã nén. Lưu trữ bắt đầu bằng một tiêu đề chính chứa thông tin về chính lưu trữ, chẳng hạn như phiên bản định dạng lưu trữ, phương pháp nén được sử dụng và tổng số tệp được lưu trữ trong lưu trữ. Theo sau tiêu đề chính là các tiêu đề tệp riêng lẻ cho mỗi tệp có trong lưu trữ. Các tiêu đề tệp này lưu trữ siêu dữ liệu như tên tệp gốc, kích thước tệp, ngày sửa đổi và tổng kiểm tra CRC-16.
Sau mỗi tiêu đề tệp, dữ liệu đã nén cho tệp đó được lưu trữ trong một hoặc nhiều khối dữ liệu. Kích thước của mỗi khối dữ liệu được xác định bởi phương pháp nén và các cài đặt được s ử dụng trong quá trình tạo lưu trữ. LHA hỗ trợ một số phương pháp nén, bao gồm -lh0- (không nén), -lh1- (mã hóa RLE), -lh4- (nén LZW), -lh5- (mã hóa LZW + Huffman) và -lh7- (nén LZSS). Lựa chọn phương pháp nén ảnh hưởng đến cả tỷ lệ nén và tốc độ giải nén của lưu trữ.
Một tính năng đáng chú ý của định dạng LHA là hỗ trợ lưu trữ vững chắc. Trong một lưu trữ vững chắc, dữ liệu đã nén cho nhiều tệp được nối lại với nhau, cho phép thuật toán nén tận dụng sự trùng lặp giữa các ranh giới tệp. Điều này có thể dẫn đến tỷ lệ nén cao hơn đáng kể so với các lưu trữ không vững chắc, trong đó mỗi tệp được nén độc lập. Tuy nhiên, lưu trữ vững chắc cũng có nhược điểm là yêu cầu phải giải nén toàn bộ lưu trữ để trích xuất một tệp duy nhất, điều này có thể tốn thời gian đối với các lưu trữ lớn.
Để tạo một lưu trữ LHA, một tiện ích nén như LHA hoặc LHarc được sử dụng. Các tiện ích này lấy một hoặc nhiều tệp đầu vào và nén chúng thành một tệp lưu trữ LHA duy nhất có phần mở rộng .lha hoặc .lzh. Quá trình nén liên quan đến việc phân tích dữ liệu đầu vào, xây dựng một từ điển các mẫu lặp lại và thay thế các mẫu đó bằng các tham chiếu ngắn hơn trong đầu ra đã nén. Sau đó, dữ liệu đã nén được chia thành các khối và được ghi vào tệp lưu trữ cùng với các tiêu đề và siêu dữ liệu cần thiết.
Giải nén các tệp từ lưu trữ LHA liên quan đến việc đọc các tiêu đề lưu trữ để xác định vị trí các tệp mong muốn rồi giải nén các khối dữ liệu tương ứng. Quá trình giải nén đảo ngược thuật toán nén, xây dựng lại dữ liệu gốc t ừ các tham chiếu từ điển và các ký hiệu được mã hóa. Hầu hết các tiện ích nén LHA đều hỗ trợ nhiều tùy chọn giải nén, chẳng hạn như giải nén các tệp cụ thể, ghi đè các tệp hiện có hoặc bảo toàn cấu trúc thư mục gốc.
Một lợi thế của định dạng LHA là khả năng tương thích của nó với nhiều hệ điều hành và nền tảng. Ngoài MS-DOS và Microsoft Windows, lưu trữ LHA có thể được tạo và giải nén trên các hệ thống giống Unix, macOS và các nền tảng khác bằng các công cụ phần mềm phù hợp. Khả năng tương thích đa nền tảng này khiến LHA trở thành lựa chọn thuận tiện để phân phối phần mềm và dữ liệu trên các môi trường khác nhau.
Tuy nhiên, định dạng LHA cũng có một số hạn chế so với các định dạng nén hiện đại hơn. Một vấn đề là thiếu hỗ trợ mã hóa tích hợp, có nghĩa là lưu trữ LHA không cung cấp bất kỳ bảo mật vốn có nào cho dữ liệu nhạy cảm. Một hạn chế khác là kích thước tệp tối đa được định dạng hỗ trợ, thường vào khoảng 2 GB do sử dụng các dịch chuyển tệp 32 bit. Ngoài ra, định dạng LHA phần lớn đã được thay thế bằng các định dạng mới hơn như ZIP và RAR, cung cấp tỷ lệ nén được cải thiện, hiệu suất tốt hơn và các tính năng bổ sung.
Mặc dù có những hạn chế này, định dạng LHA vẫn được sử dụng cho đến ngày nay, đặc biệt là để lưu trữ và phân phối phần mềm và dữ liệu cũ hơn. Nhiều trò chơi MS-DOS cổ điển, ứng dụng và lưu trữ tài liệu vẫn được phân phối ở định dạng LHA và có rất nhiều công cụ và tiện ích có sẵn để làm việc với lưu trữ LHA trên các hệ thống hiện đại. Một số tiện ích nén LHA phổ biến bao gồm LHA, LHarc và UNLHA, trong khi nhiều trình lưu trữ tệp hiện đại như 7-Zip và WinRAR cũng hỗ trợ tạo và giải nén lưu trữ LHA.
Về hiệu suất, định dạng LHA cung cấp sự cân bằng tốt giữa tỷ lệ nén và tốc độ giải nén. Các đặc điểm hiệu suất chính xác phụ thuộc vào phương pháp nén cụ thể và các cài đặt được sử dụng, cũng như bản chất của dữ liệu đầu vào. Nói chung, lưu trữ LHA được tạo bằng phương pháp -lh5- (mã hóa LZW + Huffman) cung cấp sự cân bằng tốt giữa tỷ lệ nén và tốc độ giải nén, trong khi phương pháp -lh7- (nén LZSS) cung cấp giải nén nhanh hơn với chi phí là tỷ lệ nén thấp hơn một chút.
Khi làm việc với lưu trữ LHA, điều quan trọng là phải đảm bảo rằng các công cụ phần mềm được sử dụng tương thích với phiên bản và tính năng cụ thể của định dạng lưu trữ. Các tiện ích nén LHA cũ hơn có thể không hỗ trợ các phương pháp nén hoặc tính năng lưu trữ mới hơn, trong khi các công cụ hiện đại có thể xử lý các lưu trữ cũ khác với phần mềm gốc. Cũng nên xác minh tính toàn vẹn của lưu trữ LHA bằng tổng kiểm tra CRC-16 hoặc các phương pháp xác minh khác để đảm bảo rằng dữ liệu đã nén không bị hỏng trong quá trình lưu trữ hoặc truyền.
Tóm lại, định dạng lưu trữ LHA là một định dạng nén cũ cung cấp khả năng nén hiệu quả và giải nén nhanh để lưu trữ và phân phối các tệp trên hệ thống MS-DOS và Microsoft Windows. Mặc dù phần lớn đã được thay thế bằng các định dạng mới hơn như ZIP và RAR, LHA vẫn có liên quan đến việc lưu trữ và phân phối phần mềm và dữ liệu cũ hơn. Khả năng tương thích đa nền tảng và đặc điểm hiệu suất tốt của nó làm cho nó trở thành một công cụ hữu ích trong một số trường hợp nhất định và vẫn còn nhiều tiện ích và công cụ phần mềm có sẵn để làm việc với lưu trữ LHA trên các hệ thống hiện đại. Hiểu được cấu trúc và các tính năng của định dạng LHA rất có giá trị đối với bất kỳ ai làm việc với dữ liệu cũ hoặc lưu trữ phần mềm.
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.