如何在Java中正确实现LZ4,Snappy或等效压缩技术?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在Java中正确实现LZ4,Snappy或等效压缩技术?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2253字,纯文字阅读大概需要4分钟。
内容图文
![如何在Java中正确实现LZ4,Snappy或等效压缩技术?](/upload/InfoBanner/zyjiaocheng/724/60616bf0d68742408c25d65cd0c08ebc.jpg)
我尝试将Java版本的LZ4实现为一种试图从大文本文件中搜索数据的搜索引擎程序.我只是压缩输出流并将其存储到没有名称的txt文件或文件中.但是,我意识到所谓的压缩文件的大小没有减小,但它的大小甚至比原始文件大.
最后我不得不求助于zip4j,因为它对我有用.
我想知道如何使用LZ4或Snappy罐来正确压缩/解压缩?
另外,我如何使用这些算法压缩包含许多文件的单个文件夹?
谢谢!
解决方法:
我遇到了类似的问题.我试图通过本地网络以8192字节的块发送大文件(~709 MB).我使用Lz4压缩/解压缩来减少网络带宽.
所以假设你正在尝试做类似的事情,这是我的建议:
这是您在https://github.com/jpountz/lz4-java上找到的类似常规示例的片段
private static int decompressedLength;
private static LZ4Factory factory = LZ4Factory.fastestInstance();
private static LZ4Compressor compressor = factory.fastCompressor();
public static byte[] compress(byte[] src, int srcLen) {
decompressedLength = srcLen;
int maxCompressedLength = compressor.maxCompressedLength(decompressedLength);
byte[] compressed = new byte[maxCompressedLength];
compressor.compress(src, 0, decompressedLength, compressed, 0, maxCompressedLength);
return compressed;
}
现在,如果按原样返回压缩字节数组,那么它的长度可能大于原始未压缩数据.
所以你可以修改如下:
private static int decompressedLength;
private static LZ4Factory factory = LZ4Factory.fastestInstance();
private static LZ4Compressor compressor = factory.fastCompressor();
public static byte[] compress(byte[] src, int srcLen) {
decompressedLength = srcLen;
int maxCompressedLength = compressor.maxCompressedLength(decompressedLength);
byte[] compressed = new byte[maxCompressedLength];
int compressLen = compressor.compress(src, 0, decompressedLength, compressed, 0, maxCompressedLength);
byte[] finalCompressedArray = Arrays.copyOf(compressed, compressLen);
return finalCompressedArray;
}
compressLen存储实际压缩长度,finalCompressedArray字节数组(长度为compressLen)存储实际压缩数据.通常,它的长度小于压缩字节数组和原始未压缩字节数组的长度
现在,您可以按常规方式解压缩finalCompressedArray字节数组,如下所示:
private static LZ4FastDecompressor decompressor = factory.fastDecompressor();
public static byte[] decompress(byte[] finalCompressedArray, int decompressedLength) {
byte[] restored = new byte[decompressedLength];
restored = decompressor.decompress(finalCompressedArray, decompressedLength);
return restored;
}
内容总结
以上是互联网集市为您收集整理的如何在Java中正确实现LZ4,Snappy或等效压缩技术?全部内容,希望文章能够帮你解决如何在Java中正确实现LZ4,Snappy或等效压缩技术?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。