ハッシュ テーブルに含まれる値を圧縮/解凍する必要があります。LZ4 は GZip よりもパフォーマンスが優れているように見えるので、試しています。
ここに私のコード。特に、table_data_cache
各HashMap<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 のデコード中にエラーが発生しました
なにが問題ですか?