zlib:解压后的文件大小?
我正在使用 zlib 来解压缩文件。我想验证是否有足够的磁盘空间来解压缩文件。 zip 格式和 zlib 是否提供了确定其内容的解压缩大小的工具?
I'm using zlib to decompress a file. I want to verify that there is enough disk space to unzip the file. Do the zip format and zlib provide facilities to determine the decompressed size of its contents?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您的文件是使用 gzip 格式 (RFC1952) 压缩的,则最后 4 个字节的 ISIZE 字段指示未压缩文件大小 mod 2^32。因此,如果原始文件小于4GB,则可以通过读取最后4个字节来确定其大小。检查gunzip 的手册页。
如果使用 ZLIB 或原始 Deflate 格式,您必须先解压缩以确定未压缩的大小。
If your file was compressed using the gzip format (RFC1952), then the last 4 bytes, the ISIZE field indicates the uncompressed file size mod 2^32. Therefore, provided that the original file was smaller than 4GB, you can determine its size by reading the last 4 bytes. Check the man pages for gunzip.
If ZLIB or raw Deflate format was used, you will have to decompress first to determine the uncompressed size.
只需创建一个简单的文件结构进行压缩:
{
FileFormatHeader(可选)x 字节
原始大小(4 或 8 字节)
压缩大小(可选)(4 或 8 字节)
HashSum(可选)(16 字节或不同数字[取决于哈希算法])
压缩数据
}
现在您已拥有解压所需的所有信息
Just create a simple file structure for compressing:
{
FileFormatHeader (optional) x bytes
OriginalSize (4 or 8 bytes)
CompressedSize (optional) (4 or 8 bytes)
HashSum (optional) (16 bytes or different number [depends on hash algorithm])
CompressedData
}
Now you have all the information that you need for decompressing