Mình đang viết chương trình đọc và lấy dữ liệu từ file nén gzip (tự làm thủ công). Mình đọc tài liệu về định dạng này (RFC 1952), nhưng gặp vướng mắc ở việc xác định kích thước một member trong gzip. Vì tập tin gzip có thể có nhiều member xếp liên tiếp nhau:
Code:
2.3. Member format
Each member has the following structure:
+---+---+---+---+---+---+---+---+---+---+
|ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->)
+---+---+---+---+---+---+---+---+---+---+
(if FLG.FEXTRA set)
+---+---+=================================+
| XLEN |...XLEN bytes of "extra field"...| (more-->)
+---+---+=================================+
(if FLG.FNAME set)
+=========================================+
|...original file name, zero-terminated...| (more-->)
+=========================================+
(if FLG.FCOMMENT set)
+===================================+
|...file comment, zero-terminated...| (more-->)
+===================================+
(if FLG.FHCRC set)
+---+---+
| CRC16 |
+---+---+
+=======================+
|...compressed blocks...| (more-->)
+=======================+
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| CRC32 | ISIZE |
+---+---+---+---+---+---+---+---+
Khối compressed blocks có kích thước không cố định, vậy làm thế nào xác định được khi nào thì kết thúc, để mà đọc tiếp CRC32 và ISIZE?
Rất mong nhận được giải đáp. Xin cảm ơn