我需要存储abitrary二进制数据(基本上是各种常见格式的文件,JPEG,PDF,MS-Office和其他一些奇怪的文件)。缓慢压缩不是问题,但我正在寻找合理快速的减压和尽可能好的压缩比。
现在我的系统会立即存储未压缩的数据,并且后台程序会尝试稍后压缩数据,现在我实现的唯一选项是使用GZIP。如果文件可以被压缩,它将被守护进程透明地替换为压缩版本(这就是为什么缓慢压缩根本不会打扰我)。如果有更多选项,我会非常乐意让守护进程尝试所有选择,并选择能产生最佳压缩效果的守护进程。
为了保持系统简单,我不想花很多时间来整合那些不支持通过Stream API使用的东西(比如7-Zip LZMA)。除了JRE提供的GZIP之外是否有任何压缩实现可能有用? FOS首选。
答案 0 :(得分:3)
你可以尝试使用bzip lib。 bzip通常具有更高的压缩率,速度费用。下面的一些实现:
http://www.kohsuke.org/bzip2//
http://code.google.com/p/jbzip2/
http://www.java2s.com/Code/Java/File-Input-Output/BZip2format.htm
在apache commons compress lib上还有一个bzip实现:
答案 1 :(得分:1)
您可以尝试使用LZMA。看起来有人实现了使用流{{3p>
答案 2 :(得分:0)
纯Java中的另一个LZMA实现:XZ for Java(包括LZMA)。