1

ハッシュ テーブルに含まれる値を圧縮/解凍する必要があります。LZ4 は GZip よりもパフォーマンスが優れているように見えるので、試しています。

ここに私のコード。特に、table_data_cacheHashMap<String, List<Object>>リストに 2 つのオブジェクトがあり、最初の 1 つだけを圧縮する必要がある

圧縮

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_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());
        });

しかし、次のエラーがあります。

net.jpountz.lz4.LZ4Exception: 入力バッファのオフセット 1 のデコード中にエラーが発生しました

なにが問題ですか?

4

0 に答える 0