使用 jzlib 创建 gzip 文件
我正在尝试使用开源的 jzlib 创建 gzip 文件。 Java GZIPOutputStream 有点问题,CPU 变高了却一直没有释放。
JZlib的问题是winrar无法打开文件,看起来像是缺少标头。知道如何解决吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
从JZlib 1.1.0开始,它支持gzip文件格式。
尝试 com.jcraft.jzlib。 GZIPOutputStream 类
Since JZlib 1.1.0, it has supported gzip file format.
Try com.jcraft.jzlib.GZIPOutputStream class
这是该课程的略读版本;希望它能发挥作用。
这个版本仍然保留了正确的flush()实现。
原始版本对内存内进程进行了优化(希望在删除某些部分后它仍然有效)。源代码包含来自 Apache 的 CRC32 以及对许可证的适当通知。
This is skimmed version of the class; Hopefully it can serve.
This version still retains proper flush() implementation.
The original version has optimizations for in-mem process (hopefully it still works after cutting some part). The source contains CRC32 from Apache and proper notice to the License.
JZlib 不支持 Gzip 数据格式 (RFC 1952),仅 zlib (RFC 1950) 和普通 deflate (RFC 1951 )。
这些格式仅因标头和末尾的校验和:
因此,您可以围绕 jzlib 的 deflate 压缩流编写自己的包装器(使用 nowrap=true 以避免 zlib 标头),添加元数据和 CRC32 校验和。或者你看看其他人是否已经这样做了。 (看起来 bestsss 的回答就是关于这个的。)
JZlib does not support the Gzip data format (RFC 1952), only zlib (RFC 1950) and plain deflate (RFC 1951).
These formats differ only by the header and a checksum at the end:
Thus you can write your own wrapper around jzlib's deflate compressing stream (using nowrap=true to avoid the zlib header), adding your metadata and the CRC32 checksum. Or you take a look if someone else already did this. (Looks like bestsss' answer does about this.)