是否有适用于 LZ4 和 ZStd 的最佳 Java 压缩库?我尝试过 apache commons (这是 zstd-jni 实现)
String fileURL = TestFileUtil.getFileURL(TestFileCategory.SMALL);
String outputFileName = TestFileUtil.BASE_DIR+"/zstd-"+(Math.random()*10)+".x";
System.out.println(Paths.get(fileURL));
printFileInfo(fileURL);
StopWatch watch = new StopWatch();
InputStream in = Files.newInputStream(Paths.get(fileURL));
OutputStream fout = Files.newOutputStream(Paths.get(outputFileName));
BufferedOutputStream out = new BufferedOutputStream(fout);
ZstdCompressorOutputStream zOut = new ZstdCompressorOutputStream(out);
int buffersize = 1024*4;
watch.mark();
final byte[] buffer = new byte[buffersize];
int n = 0;
while (-1 != (n = in.read(buffer))) {
zOut.write(buffer, 0, n);
}
zOut.close();
in.close();
但这段代码不起作用,它会抛出
Exception in thread "main" java.lang.NoClassDefFoundError: com/github/luben/zstd/ZstdOutputStream
at org.apache.commons.compress.compressors.zstandard.ZstdCompressorOutputStream.<init>(ZstdCompressorOutputStream.java:83)
at com.zoho.test.testzstd.main(testzstd.java:28)
Caused by: java.lang.ClassNotFoundException: com.github.luben.zstd.ZstdOutputStream
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
对于 LZ4,我只需将 ZStdCompressorOutputStream 替换为
FramedLZ4CompressorOutputStream lzOut = new FramedLZ4CompressorOutputStream(out);
但压缩 2.4GB (csv) 文件花了近 2 小时(尚未完成)。
代码有什么问题吗?或任何其他建议?
For zstd
,Java 有 @luben 的 zstd-jni :https://github.com/luben/zstd-jni https://github.com/luben/zstd-jni
如果您更喜欢 Java 原生,@martint 在 Java 中有一个完整的移植(尽管功能较少),位于:https://github.com/airlift/aircompressor/tree/master/src/main/java/io/airlift/compress/zstd https://github.com/airlift/aircompressor/tree/master/src/main/java/io/airlift/compress/zstd
对于 LZ4,常见的绑定是:https://github.com/lz4/lz4-java https://github.com/lz4/lz4-java,
不过,如果您更喜欢与以下兼容的实现lz4
命令行界面阿帕奇共享区 https://commons.apache.org/proper/commons-compress/javadocs/api-release/org/apache/commons/compress/compressors/lz4/package-summary.html版本是优选的。
通常不能仅通过更改一个调用名称来交换这些库。请参阅他们的文档或示例以了解它们的工作原理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)