我有一个由一些bzip2
档案组成的串联文件。我也知道该文件中各个bzip2
块的大小。
我想bzip2
从单个 bzip2 数据块中解压缩流,并将输出写入标准输出。
首先,我使用fseek
将文件光标移动到所需的存档字节,然后将文件的“大小”块读取到BZ2_bzRead
调用中:
int headerSize = 1234;
int firstChunkSize = 123456;
FILE *fp = fopen("pathToConcatenatedFile", "r+b");
char *bzBuf = malloc(sizeof(char) * firstChunkSize);
int bzError, bzNBuf;
BZFILE *bzFp = BZ2_bzReadOpen(&bzError, *fp, 0, 0, NULL, 0);
# move cursor past header of known size, to the first bzip2 "chunk"
fseek(*fp, headerSize, SEEK_SET);
while (bzError != BZ_STREAM_END) {
# read the first chunk of known size, decompress it
bzNBuf = BZ2_bzRead(&bzError, bzFp, bzBuf, firstChunkSize);
fprintf(stdout, bzBuf);
}
BZ2_bzReadClose(&bzError, bzFp);
free(bzBuf);
fclose(fp);
问题是,当我将fprintf
语句的输出与bzip2
在命令行上运行的输出进行比较时,我得到了两个不同的答案。
bzip2
具体来说,与在命令行上运行相比,我从这段代码中获得的输出更少。
更具体地说,此代码的输出是命令行进程输出的较小子集,并且我缺少感兴趣的 bzip2 块尾部的内容。
我已经通过另一种技术验证了命令行bzip2
提供了正确的答案,因此,我的 C 代码的一些问题导致块末尾的输出丢失。我只是不知道那个问题是什么。
如果您熟悉bzip2
or libbzip2
,您能否就我在上面的代码示例中做错了什么提供任何建议?感谢您的意见。