Định dạng lưu trữ GZIP
GZIP là một định dạng tệp và ứng dụng phần mềm phổ biến được sử dụng để nén và giải nén tệp. Nó được Jean-Loup Gailly và Mark Adler phát triển dưới dạng thuật toán nén mã nguồn mở và miễn phí vào đầu những năm 1990. Tên “GZIP” là viết tắt của GNU ZIP, biểu thị sự liên kết của nó với Dự án GNU.
Tính năng nén GZIP hoạt động bằng cách giảm kích thước tệp, giúp chúng dễ dàng truyền qua mạng hoặc lưu trữ trên đĩa hơn. Nó đạt được khả năng nén bằng cách thay thế các chuỗi dữ liệu lặp lại bằng các tham chiếu, do đó giảm sự dư thừa và kích thước tệp tổng thể. GZIP đặc biệt hiệu quả trong việc nén các tệp dựa trên văn bản như HTML, CSS, JavaScript, XML và JSON, nhưng nó cũng có thể được sử dụng để nén các loại tệp khác.
Giới thiệu về thông tin lưu trữ GZIP
Thông tin lưu trữ GZIP đề cập đến siêu dữ liệu và dữ liệu có trong tệp được nén bằng thuật toán nén GZIP. Các kho lưu trữ GZIP thường bao gồm các thông tin như thuộc tính tệp, dấu thời gian, phương pháp nén và các dữ liệu liên quan khác cần thiết để giải nén và khôi phục tệp. Siêu dữ liệu này rất quan trọng để xác định và xử lý chính xác các tệp nén.
Ngoài ra, thông tin lưu trữ GZIP cũng có thể bao gồm các chi tiết về chính quá trình nén, chẳng hạn như mức nén, tổng kiểm tra và bất kỳ cờ hoặc tùy chọn bổ sung nào được sử dụng trong quá trình nén. Thông tin này rất cần thiết để đảm bảo tính toàn vẹn và chính xác của dữ liệu nén khi giải nén nó. Nhìn chung, việc hiểu thông tin lưu trữ GZIP là rất quan trọng để quản lý và làm việc hiệu quả với các tệp nén, cho dù là để lưu trữ dữ liệu, truyền qua mạng hay mục đích lưu trữ.
Sự phát triển của định dạng lưu trữ GZIP
Định dạng lưu trữ GZIP có nguồn gốc từ cuối những năm 1980 khi Jean-loup Gailly và Mark Adler phát triển thuật toán nén GZIP như một phần của dự án GNU. GZIP là viết tắt của GNU ZIP, phản ánh nguồn gốc của nó trong dự án GNU. Mục tiêu là tạo ra một công cụ nén có thể giảm kích thước tệp một cách hiệu quả trong khi vẫn duy trì khả năng tương thích trên các hệ thống máy tính khác nhau.
Jean-loup Gailly và Mark Adler đã phát triển chương trình này như một giải pháp thay thế miễn phí cho tiện ích nén có trong các hệ thống Unix đời đầu. Nó được thiết kế để trở thành một phần của dự án GNU, do đó có chữ “g” trong gzip. Bản phát hành đầu tiên, phiên bản 0.1, được ra mắt công chúng vào ngày 31 tháng 10 năm 1992, tiếp theo là phiên bản 1.0 vào tháng 2 năm 1993.
Cấu trúc GZIP
GZIP sử dụng thuật toán DEFLATE, kết hợp các kỹ thuật mã hóa LZ77 và Huffman. DEFLATE được phát triển để thay thế LZW và các thuật toán nén khác bị cản trở bởi các bằng sáng chế, điều này đã hạn chế tính hiệu quả của việc nén và các tiện ích lưu trữ tương tự phổ biến vào thời điểm đó. Định dạng tệp GZIP tuân theo cấu trúc được xác định rõ ràng bao gồm ba phần chính:
- Tiêu đề (10 byte): Phần này cung cấp thông tin cần thiết về kho lưu trữ và nội dung của nó. Đây là bảng phân tích dữ liệu tiêu đề
- Số ma thuật (4 byte): Số này xác định tệp là kho lưu trữ GZIP. Nó có một giá trị thập lục phân cụ thể (1f 8b) mà các công cụ giải nén nhận ra.
- Phương thức nén (1 byte): Byte này thường giữ giá trị 8, cho biết thuật toán nén DEFLATE được GZIP sử dụng.
- Cờ tiêu đề (1 byte): Những cờ này kiểm soát các khía cạnh cụ thể của quá trình giải nén, chẳng hạn như mã hóa tên tệp hoặc sự hiện diện của nhận xét.
- Thời gian tạo (4 byte): Phần này lưu trữ dấu thời gian Unix cho biết thời gian kho lưu trữ được tạo.
- CRC-32 (4 byte): Giá trị Kiểm tra dự phòng theo chu kỳ này được sử dụng để phát hiện lỗi trong quá trình giải nén. Nó được tính toán dựa trên dữ liệu không nén và cho phép phần mềm giải nén xác minh tính toàn vẹn của các tệp được giải nén.
Lợi ích của định dạng này
- Nén không mất dữ liệu: GZIP nén dữ liệu mà không làm mất thông tin. Không giống như một số kỹ thuật nén, các tệp gốc có thể được xây dựng lại hoàn hảo sau khi giải nén. Điều này rất quan trọng đối với các tài liệu, hình ảnh hoặc mã quan trọng trong đó việc duy trì tính toàn vẹn của dữ liệu là điều cần thiết.
- Khả năng tương thích rộng: Một trong những điểm mạnh lớn nhất của GZIP là việc áp dụng rộng rãi. Nó được hỗ trợ bởi hầu hết các hệ điều hành, tiện ích lưu trữ (WinRAR, 7-Zip) và máy chủ web. Điều này đảm bảo bạn có thể dễ dàng mở tệp GZIP trên nhiều nền tảng khác nhau mà không cần phần mềm cụ thể. Ngoài ra, GZIP còn được hỗ trợ rộng rãi trên nhiều hệ điều hành khác nhau, bao gồm các hệ thống dựa trên Unix, Linux, Windows và macOS. Khả năng tương thích đa nền tảng này đảm bảo rằng các tệp nén GZIP có thể được tạo và giải nén liền mạch trên các môi trường khác nhau.
- Nén có thể phát trực tuyến: GZIP hỗ trợ nén luồng, cho phép nén hoặc giải nén tệp nhanh chóng mà không cần phải đợi toàn bộ tệp được xử lý. Điều này làm cho nó phù hợp với các tình huống trong đó dữ liệu được tạo hoặc truyền liên tục, chẳng hạn như hoạt động liên lạc mạng và sao lưu dữ liệu.
- Tiêu chuẩn mở: GZIP là một tiêu chuẩn mở và được áp dụng rộng rãi để nén tệp, với các thông số kỹ thuật được công bố rộng rãi. Tính mở này khuyến khích khả năng tương tác và tương thích giữa các ứng dụng và hệ thống phần mềm khác nhau, thúc đẩy một hệ sinh thái sôi động gồm các công cụ và thư viện để làm việc với các tệp nén GZIP. Việc sử dụng GZIP nói chung là đơn giản. Nhiều công cụ và phần mềm tự động nén hoặc giải nén file ở định dạng này. Ngoài ra, quá trình giải nén diễn ra hiệu quả và yêu cầu nguồn lực tối thiểu.
Hoạt động được hỗ trợ lưu trữ GZIP
Aspose.ZIP cho phép người dùng trích xuất mục nhập cụ thể hoặc toàn bộ kho lưu trữ. Đối với Aspose.ZIP cho .NET Bạn có thể sử dụng GzipArchiveClass để mở tệp .gz rồi lặp qua các mục nhập của nó, trích xuất chúng đến vị trí mong muốn. Đối với Aspose.ZIP dành cho Java Cách tiếp cận tương tự bằng cách sử dụng GzipArchive để mở tệp .gz và trích xuất các mục nhập.
Tệp GZIP - Cấu trúc bên trong
Kho lưu trữ GZIP giống như một gói được gói gọn gàng. Nó bắt đầu bằng tiêu đề 10 byte giới thiệu định dạng và phương pháp nén. Trái tim nằm trong phần dữ liệu được nén, thu nhỏ bằng thuật toán thông minh. Cuối cùng, chân trang 8 byte sẽ xác minh tính toàn vẹn của dữ liệu bằng tổng kiểm tra, đảm bảo tệp của bạn đến nơi an toàn sau khi giải nén.
Cấu trúc lưu trữ bên trong
- Siêu dữ liệu tệp - Tương tự như kho lưu trữ tar, mỗi tệp lưu trữ thông tin cơ bản như thời gian sửa đổi và quyền. Tuy nhiên, phần này linh hoạt và cho phép bỏ qua hoặc bao gồm các chi tiết bổ sung như danh sách kiểm soát truy cập (ACL) hoặc thuộc tính mở rộng (EA) dựa trên nhu cầu của bạn. Bạn nên thêm hàm băm mạnh (như SHA1) cho các tệp thông thường để đảm bảo tính toàn vẹn của dữ liệu.
- Nhiều luồng nội dung - Không giống như các kho lưu trữ truyền thống, các tệp có thể có nhiều luồng dữ liệu trong tệp dữ liệu bên trong. Điều này rất hữu ích để lưu trữ các thuộc tính mở rộng hoặc các nhánh tài nguyên được liên kết với tệp.
- Tiêu đề - Tệp chỉ mục bên trong chứa các tiêu đề tệp, phản ánh những tiêu đề nằm rải rác trong tệp dữ liệu bên trong. Tuy nhiên, khi được lưu trữ riêng biệt, các tiêu đề chỉ mục phải tham chiếu đến vị trí bắt đầu của dữ liệu tương ứng trong tệp dữ liệu. Ngoài ra, các mục nhập thư mục trong chỉ mục liệt kê các tệp chứa của chúng và các phần bù tương ứng của chúng trong chỉ mục tệp bên trong.
- Cơ sở lý luận cho siêu dữ liệu trùng lặp - Lựa chọn thiết kế này đảm bảo cả việc truyền/giải mã dữ liệu hiệu quả và truy cập tệp ngẫu nhiên. Ngoài ra, siêu dữ liệu nén tốt, dẫn đến chi phí lưu trữ ở mức tối thiểu. Các thử nghiệm cho thấy siêu dữ liệu thường chiếm ít hơn 0,3% dung lượng lưu trữ, khiến việc đánh đổi trở nên đáng giá.
- Tiêu đề khối - Tiêu đề khối, tương tự như tệp bên ngoài, chứa thông tin kích thước khối và chuỗi nhận dạng duy nhất.
Ví dụ về việc sử dụng GZIP
API Aspose.ZIP cho phép trích xuất các kho lưu trữ trong ứng dụng của bạn mà không cần bất kỳ ứng dụng bên thứ 3 nào khác. API Aspose.ZIP cung cấp lớp GzipArchive để hoạt động với các kho lưu trữ GZIP.
GZIP with compress only single source via C#
Such archives like GZIP, LZ, BZIP2, XZ, Z do not support entries and can compress only single source. See samples with such a compression.
using (FileStream source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (GzipArchive archive = new GzipArchive())
{
archive.SetSource(source);
archive.Save(«archive.gz”);
}
}
Thông tin bổ sung về kho lưu trữ GZIP
Mọi người đã hỏi
1. GZIP là gì?
GZIP (GNU zipped archive) là định dạng tệp phổ biến giúp thu nhỏ kích thước tệp để lưu trữ và truyền tải dễ dàng hơn.
2. Nén GZIP so với các định dạng khác như ZIP như thế nào?
GZIP thường cung cấp tỷ lệ nén cao hơn so với ZIP, đặc biệt là khi nén các tệp dựa trên văn bản. Tuy nhiên, kho lưu trữ ZIP thường hỗ trợ nhiều tệp và thư mục, khiến chúng linh hoạt hơn trong việc đóng gói nhiều tệp lại với nhau .
3. GZIP có thể nén nhiều tệp vào một kho lưu trữ không?
GZIP được thiết kế để nén một tệp duy nhất chứ không phải nhiều tệp hoặc thư mục. Tuy nhiên, người ta thường sử dụng các công cụ như tar kết hợp với GZIP để tạo tarball tar archive và sau đó nén nó bằng GZIP để tạo một tệp nén duy nhất.