use*_*900 5 java compression gzip
我认为有办法做到这一点,但我不确定如何?基本上,我正在编写一个压缩程序,当我尝试解压缩压缩数据时导致crc错误.通常这意味着解压缩器实际上将我的数据识别为正确格式并对其进行解压缩,但是当它将结果与CRC指示的预期长度进行比较时,它们并不相同.
但是,出于比较的原因,我实际上确实希望看到输出以查看它是否只是一个连接问题(如果解压缩的输出不是乱码但只是错误的顺序,这应该是相对明显的).
Mar*_*ler 11
你说"解压缩",但问题是"gzip".这是什么?这是两种不同的程序,以两种不同的格式运行.我会假设gzip.长度也不是"由CRC表示".gzip预告片包含CRC和未压缩长度(模2 32),这是两个不同的东西.
该gzip命令将解压缩所有有效的deflate数据并在检查crc之前将其写出.因此,例如,如果我拿一个.gz文件并在最后损坏crc(或长度),并执行:
gzip -dc < corrupt.gz > result
Run Code Online (Sandbox Code Playgroud)
那么结果将是整个正确的未压缩数据流.无需修改和重新编译gzip,也无需编写自己的ungzipper.gzip会抱怨crc,但所有数据都会被写入.
据我所知,CRC 检查是 GZIP 包装器的一部分,而不是 DEFLATE 格式的实际压缩数据的一部分。
因此,您应该能够仅获取压缩数据流的字节,忽略末尾的 GZIP 标头和 CRC,并将其传递给 Inflater。
换句话说,您只需获取与GZIP 文件格式规范中称为“压缩块”的字节相对应的字节,并尝试使用 Java Inflater 对象进行解压缩。需要做一点工作,但可能比格雷格建议的重新编译 GZIP 代码要少(尽管他的选择原则上也可行)。
| 归档时间: |
|
| 查看次数: |
9776 次 |
| 最近记录: |