all*_*ije 8 gzip partial gunzip libz
对于处理存储为.gz文件的图像(我的图像处理软件可以读取.gz文件以获得更短/更小的磁盘时间/空间)我需要检查每个文件的标题.
标题只是每个图像开头的固定大小的小结构,对于未压缩的图像,检查它非常快.为了读取压缩图像,我别无选择,只能解压缩整个文件然后检查这个标题,这当然会减慢我的程序速度.
是否可以读取.gz文件的第一段(比如几个K),解压缩该段并读取原始内容?我对gz的理解是,在开始的一些簿记之后,压缩数据是按顺序存储的 - 这是正确的吗?
所以代替
1.打开大文件F
2.解压缩大文件F
3.读取500字节标题
4.重新压缩大文件F
做
1.开大文件F
2读出的第一5 K.从F作为料流A
3解压缩A作为流B
4从读500字节的头B
我正在使用,libz.so但其他语言的解决方案表示赞赏!
Mic*_*ner 12
例如,您可以使用gzip -cd file.gz | dd ibs=1024 count=10仅解压缩前10个KiB.
gzip -cd 解压缩到标准输出.
将其管道|输入dd实用程序.
该dd实用程序将标准输入复制到标准输出.因此,dd ibs=1024将输入块大小设置为1024字节而不是默认值512.
并且count=10只复制10个输入块,从而停止gzip解压缩.
您将要gzip -cd file.gz | dd count=1使用标准512块大小,并忽略额外的12个字节.
评论强调您可以使用gzip -cd file.gz | head -c $((1024*10))或在此特定情况下使用gzip -cd file.gz | head -c $(512).原来dd依赖于1024中的gzip解压缩的评论似乎并不正确.例如, dd ibs=2 count=10解压缩前20个字节.