使用Java进行高效的LZ4多文件压缩

我使用了adrien grand的Java存储库,该存储库向原始LZ4本机代码提供了JNI.

我想在给定的输入目录下压缩多个文件,但是LZ4不支持java zip包中的多个文件压缩,所以我尝试了另一种方法,我想到将所有输入文件压缩为tar,并将其作为输入传递给LZ4压缩器,并且我使用Jtar java包对所有输入文件进行了称重.除此之外,还有其他更好的方法吗?

我遇到了许多示例代码来压缩一些字符串以及如何正确实现LZ4压缩器和解压缩器.现在我想知道如何为多个文件实现它?我还想澄清我是否朝着正确的方向前进.

将所有文件去皮重后,根据示例代码用法说明,我现在必须将已皮重的文件转换为字节数组,以将其提供给压缩器模块.我为此目的使用了apache-common-ioutil软件包.因此,考虑到我有许多文件作为输入,并且会导致tar很大,因此根据我的看法,将其始终转换为字节数组似乎无效.我想先知道这是否有效?还是有比这更好的使用LZ4软件包的更好方法?

我遇到的另一个问题是最终结果.对压缩后的文件进行压缩后,我将得到最终结果,例如MyResult.lz4文件作为输出,但由于无法支持存档格式,因此无法使用存档管理器(我正在使用ubuntu)对其进行解压缩.我也不清楚在这里必须使用的存档和压缩格式.我还想知道最终结果应该采用哪种格式.因此,现在我从用户的角度出发,考虑一种情况,如果我为他/她提供传统的.zip,则可以为用户生成备份,.gz或任何已知格式,用户可以自行解压缩.据我所知LZ4并不意味着我必须期望用户也应该知道这种格式,对吗?他甚至可能对看到这种格式感到困惑.因此,这意味着从.lz4到.zip格式的转换似乎也没有意义.我已经将所有输入文件的去皮过程视为耗时的过程,因此我想知道它对性能的影响.正如我在Java zip包中看到的,压缩多个输入文件似乎根本不是问题.因此,在lz4旁边,我遇到了Apache通用压缩和TrueZIP.我还遇到了一些有关它们的堆栈溢出链接,这对我有很多帮助.到目前为止,我真的很想使用LZ4进行压缩,特别是由于它的性能,但我遇到了这些障碍.任何对LZ4软件包有充分了解的人都可以通过简单的实现为我的所有查询和问题提供解决方案.谢谢.

我为包含许多文件的输入计算的时间,
 去皮时间:4704毫秒
 将文件转换为字节数组所需的时间:7毫秒
 压缩时间:33毫秒

解决方法:

一些事实:

> LZ4在这里与GZIP没什么不同:它是一个涉及压缩的单关注项目.它不处理存档结构.这是故意的.
> Adrien Grand的LZ4库产生的输出与命令行LZ4实用程序不兼容.这也是故意的.
>使用tar的方法似乎还可以,因为这是使用GZIP完成的方式.

理想情况下,您应该使tar代码产生一个立即压缩的流,而不是先完全存储在RAM中.这是使用Unix管道在命令行中实现的.

上一篇:linux-如何仅将路径中的最后一个目录打包到tar文件中?


下一篇:Redis集群方案应该怎么做?都有哪些方案?