首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Java的LZ4和Zstd

用于Java的LZ4和Zstd
EN

Stack Overflow用户
提问于 2020-04-01 23:21:21
回答 1查看 2.2K关注 0票数 2

有没有适用于LZ4和ZStd的最好的Java压缩库?我尝试过apache commons (这是zstd-jni实现)

代码语言:javascript
复制
            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(); 

但是这段代码不能工作,它抛出

代码语言:javascript
复制
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替换为

代码语言:javascript
复制
FramedLZ4CompressorOutputStream lzOut = new FramedLZ4CompressorOutputStream(out);

但压缩2.4 it (csv)文件需要近2小时(尚未完成)。代码有什么问题吗?还有其他的建议吗?

EN

回答 1

Stack Overflow用户

发布于 2020-06-30 05:32:30

对于zstd,Java有@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

对于LZ4,常见的绑定是:https://github.com/lz4/lz4-java,但如果您更喜欢与lz4 CLI兼容的实现,则Apache Commons版本更可取。

这些库通常不能仅通过更改一个调用名称来交换。请参考它们的文档或示例,以了解它们的工作原理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60974402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档