2

7-Zip 作者提供的本机Java LZMA SDK可以工作,但速度不足以满足我的需求。高级实现似乎无法处理算法所需的低级工作。

我找到了7-Zip-JBinding,它在 7-Zip 附带的 C++ dll 上实现了JNI覆盖。这以合理的速度处理解压缩,但它处于测试阶段,目前不支持压缩

无论如何,我的问题分为两部分:

  1. 我是否假设 DLL 包装器是快速 Java 实现的最佳选择?
  2. 如果是这样,是否有一个预先存在的项目我应该看,或者我必须从头开始写一些东西?
4

2 回答 2

0

它可能不是您的选择,但我通过使用 ProcessBuilder 简单地执行外部 7z 进程取得了巨大的成功。使用 LZMA2 并降低压缩级别也大大加快了压缩时间。当然还有便携性问题。

您可能想查看XZ for Java。XZ 使用 LZMA2 压缩,但具有更适合 Unix 环境的不同格式。最新的 7zip 应该能够提取 .XZ 档案。

于 2014-08-20T19:46:01.563 回答
0

看看Apache Commons Compress,它有一个优秀的 LZMA2 格式 API。使用的实现是用于 Java 的 XZ,因此您还需要将此依赖项添加到您的代码中。示例页面有一个代码片段,它显示了如何使用 XZCompressorInputStream 进行解压缩:

FileInputStream fin = new FileInputStream("archive.tar.xz");
BufferedInputStream in = new BufferedInputStream(fin);
FileOutputStream out = new FileOutputStream("archive.tar");
XZCompressorInputStream xzIn = new XZCompressorInputStream(in);
final byte[] buffer = new byte[buffersize];
int n = 0;
while (-1 != (n = xzIn.read(buffer))) {
    out.write(buffer, 0, n);
}
out.close();
xzIn.close();

您应该知道 LZMA 是一种已弃用的格式 - Apache Commons Compress 仅支持读取此格式,对于 Java 的 XZ 也是如此。LZMA2 包装在 XZ 存档格式中,但这绝对是要走的路,因为它是受支持的算法/格式,并且在其他平台上也可用。Linux 上还有一个名为“xz”的命令行工具,可用于压缩/解压缩文件。

于 2015-02-26T11:42:23.600 回答