gpt4 book ai didi

java - 使用 java 的高效 LZ4 多文件压缩

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:29 26 4
gpt4 key购买 nike

我使用了 adrien grand 的 java 存储库,为原始 LZ4 native 代码提供 JNI。

我想在给定的输入目录下压缩多个文件,但 LZ4 不支持像 java zip 包中那样的多文件压缩,所以我尝试了另一种方法,我想将所有输入文件打包并通过管道将其作为输入LZ4 压缩器,我使用 Jtar java 包对我所有的输入文件进行去皮。 除了这个还有其他更好的方法吗?

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

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

我遇到的另一个问题是最终结果。压缩去皮文件后,我会得到像 MyResult.lz4 文件这样的最终结果作为输出,但我无法使用存档管理器(我使用的是 ubuntu)解压缩它,因为它不支持这种格式。 我也不清楚我必须在这里使用的存档和压缩格式。我也想知道最终结果应该是什么格式。 所以现在我从用户的角度来说,考虑这样一种情况,如果我提供给用户,我会为他/她生成备份对于传统的 .zip、.gz 或任何已知格式,用户可以自行解压缩。据我所知,LZ4 并不意味着我必须期望用户也应该知道这种格式,对吧?看到这样的格式,他甚至可能会感到困惑。所以这意味着从 .lz4 到 .zip 格式的转换似乎也没有意义。我已经看到我所有输入文件的去皮过程是一个耗时的过程,所以我想知道它对性能有多大影响。正如我在 java zip 包压缩多个输入文件中看到的那样似乎根本不是问题。所以在 lz4 之后,我遇到了 Apache common compress 和 TrueZIP。我还遇到了几个关于它们的堆栈溢出链接,这帮助我学到了很多东西。截至目前,我真的很想使用 LZ4 进行压缩,尤其是因为它的性能,但我遇到了这些障碍。任何对 LZ4 包有很好了解的人都可以提供解决我所有疑问和问题的方法以及简单的实现。谢谢。

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

最佳答案

一些事实:

  1. LZ4 在这里与 GZIP 没有什么不同:它是一个单一关注的项目,处理压缩。它不处理归档结构。这是故意的。
  2. Adrien Grand 的 LZ4 库生成与命令行 LZ4 实用程序不兼容的输出。这也是故意的。
  3. 您使用 tar 的方法似乎没问题,因为 GZIP 就是这样做的。

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

关于java - 使用 java 的高效 LZ4 多文件压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com