GZIPInput/OutputStream的替代方案,具有更好的压缩比



我需要存储一些二进制数据(基本上是各种常见格式的文件,JPEG、PDF、MS Office和其他一些奇怪的文件)。缓慢的压缩不是问题,但我正在寻找合理快速的解压缩和尽可能好的压缩比。

目前,我的系统立即存储未压缩的数据,后台进程稍后尝试压缩数据,目前我实现的唯一选项是使用GZIP。如果文件可以压缩,它会被守护进程透明地替换为压缩版本(这就是为什么慢速压缩根本不会困扰我的原因)。如果有更多的选择,我会很乐意让守护进程尝试所有的选择,并选择产生最佳压缩的选项。

为了保持系统简单,我不想花很大的力气来集成那些不支持通过Stream API(如7-Zip LZMA)使用的东西。除了JRE提供的GZIP之外,还有什么可能有用的压缩实现吗?FOS优先。

您可以尝试bzip库。bzip通常以速度为代价具有更好的压缩比。以下一些实现:

http://www.kohsuke.org/bzip2//

http://code.google.com/p/jbzip2/

http://www.java2s.com/Code/Java/File-Input-Output/BZip2format.htm

还有一个bzip在apachecommons压缩库上的实现:

http://commons.apache.org/compress/

您可以尝试使用LZMA。看起来有人在这里用流隐含了用法。

纯Java中的另一个LZMA实现:XZ for Java(包括LZMA)。

最新更新