JAVA-使用LZ4库进行压缩/解压缩

JAVA-使用LZ4库进行压缩/解压缩,java,lz4,Java,Lz4,我需要压缩/解压缩哈希表中包含的值。 因为LZ4似乎比GZip提供更好的性能,所以我正在尝试 这是我的密码。 特别是,table\u data\u cache是一个HashMap,其中每个列表有2个对象,只需压缩第一个对象 压缩 table_data_cache.forEach((kk,vv) -> { try{ ByteArrayOutputStream b = new ByteArrayOutputStream();

我需要压缩/解压缩哈希表中包含的值。 因为LZ4似乎比GZip提供更好的性能,所以我正在尝试

这是我的密码。 特别是,
table\u data\u cache
是一个
HashMap
,其中每个列表有2个对象,只需压缩第一个对象

压缩

table_data_cache.forEach((kk,vv) -> {

            try{
                ByteArrayOutputStream b = new ByteArrayOutputStream();
                ObjectOutputStream o = new ObjectOutputStream(b);
                o.writeObject(vv.get(0));
                byte[] source = b.toByteArray();
                int decompressedLength = source.length;
                LZ4Factory factory = LZ4Factory.fastestInstance();
                LZ4Compressor compressor = factory.fastCompressor();
                int maxCompressedLength = compressor.maxCompressedLength(decompressedLength);
                byte[] compressed = new byte[maxCompressedLength];
                int compressLen = compressor.compress(source, 0, decompressedLength, compressed, 0, maxCompressedLength);
                 byte[] finalCompressedArray = Arrays.copyOf(compressed, compressLen);
                List<Object> list = new ArrayList<>();
                list.add(finalCompressedArray);
                list.add(vv.get(1));
                table_data_cache_compressed.put(kk, list);
            }catch(Exception e){
                e.printStackTrace();
            }
table\u data\u cache.forEach((kk,vv)->{
试一试{
ByteArrayOutputStream b=新的ByteArrayOutputStream();
ObjectOutputStream o=新的ObjectOutputStream(b);
o、 writeObject(vv.get(0));
字节[]源=b.toByteArray();
int decompressedLength=source.length;
LZ4Factory=LZ4Factory.FastTestInstance();
LZ4压缩机压缩机=工厂.fastCompressor();
int maxCompressedLength=压缩机.maxCompressedLength(解压缩长度);
字节[]压缩=新字节[maxCompressedLength];
int compressLen=compressor.compress(源,0,解压缩长度,压缩,0,最大压缩长度);
字节[]finalCompressedArray=Arrays.copyOf(compressed,compressLen);
列表=新的ArrayList();
列表。添加(最终压缩数据);
列表添加(vv.get(1));
表\u数据\u缓存\u压缩.put(kk,list);
}捕获(例外e){
e、 printStackTrace();
}
解压缩

table_data_cache_compressed.forEach((kkk,vvv)->{
            List<AbstractClass> list = new ArrayList<>();
            try{

                LZ4Factory factory = LZ4Factory.fastestInstance();
                LZ4FastDecompressor decompressor = factory.fastDecompressor();

                byte[] src = (byte[])vvv.get(0);
                byte[] restored = "".getBytes();
                decompressor.decompress(src, restored);
                ObjectInputStream objectIn = new ObjectInputStream(new ByteArrayInputStream(restored));
                list = (List<AbstractClass>) objectIn.readObject();
                CacheStatus status = (CacheStatus) vvv.get(1);
                System.out.println("key: "+kkk+" ID1: "+list.get(0).getParameterValue("REG_MAP_ID", "int", section_name)+" timestamp: "+status.getTIMESTAMP());

            }
            catch(Exception e){
                e.printStackTrace();
            }
                CacheStatus status = (CacheStatus) vvv.get(1);
            System.out.println("key: "+kkk+" ID1: "+list.get(0).getParameterValue("REG_MAP_ID", "int", section_name)+" timestamp: "+status.getTIMESTAMP());
        });
table\u data\u cache\u compressed.forEach((kkk,vvv)->{
列表=新的ArrayList();
试一试{
LZ4Factory=LZ4Factory.FastTestInstance();
LZ4FastDecompressor decompressor=工厂。fastDecompressor();
字节[]src=(字节[])vvv.get(0);
字节[]已还原=“.getBytes();
减压器。减压器(src,还原);
ObjectInputStream objectIn=新的ObjectInputStream(新的ByteArrayInputStream(已还原));
list=(list)objectIn.readObject();
CacheStatus status=(CacheStatus)vvv.get(1);
System.out.println(“key:+kkk+”ID1:“+list.get(0).getParameterValue”(“REG\u MAP\u ID”,“int”,section\u name)+“timestamp:”+status.getTIMESTAMP());
}
捕获(例外e){
e、 printStackTrace();
}
CacheStatus status=(CacheStatus)vvv.get(1);
System.out.println(“key:+kkk+”ID1:“+list.get(0).getParameterValue”(“REG\u MAP\u ID”,“int”,section\u name)+“timestamp:”+status.getTIMESTAMP());
});
但我有以下错误:

net.jpountz.lz4.lz4异常:错误解码输入缓冲区的偏移量1


有什么问题吗?

我试图将
还原的
大小设置为
3*src.lenght
,但问题仍然存在。@Fab-你解决过这个问题吗?我有一个问题,比如如果我不知道解压数组的长度,那么我应该如何解压字节数组?我有一个压缩字节数组。我想解压它。我试图通过将其设置为
3*src.lenght
来调整
还原的
大小,但问题仍然存在。@Fab-你解决过这个问题吗?我有一个问题,比如如果我不知道解压缩数组的长度,那么我应该如何解压缩字节数组?我有一个压缩字节数组。我想解压缩它。