Skip to content

Commit 6a78d51

Browse files
authored
feat: optimize zstd compress (#246)
1 parent 5680490 commit 6a78d51

2 files changed

Lines changed: 20 additions & 23 deletions

File tree

arex-instrumentation-foundation/src/main/java/io/arex/foundation/util/CompressUtil.java

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package io.arex.foundation.util;
22

3-
import com.github.luben.zstd.ZstdInputStream;
4-
import com.github.luben.zstd.ZstdOutputStream;
3+
import com.github.luben.zstd.RecyclingBufferPool;
4+
import com.github.luben.zstd.ZstdInputStreamNoFinalizer;
5+
import com.github.luben.zstd.ZstdOutputStreamNoFinalizer;
56
import org.slf4j.Logger;
67
import org.slf4j.LoggerFactory;
78

@@ -35,7 +36,8 @@ public static byte[] zstdCompress(byte[] original) {
3536

3637
try (ByteArrayInputStream byteInputStream = new ByteArrayInputStream(original);
3738
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(byteInputStream.available());
38-
ZstdOutputStreamNoFinalizer zstdOutputStream = new ZstdOutputStreamNoFinalizer(byteOutputStream)) {
39+
ZstdOutputStreamNoFinalizer zstdOutputStream = new ZstdOutputStreamNoFinalizer(byteOutputStream,
40+
RecyclingBufferPool.INSTANCE)) {
3941

4042
byte[] buffer = new byte[BYTES_BUFFER_LENGTH];
4143
for (int length; (length = byteInputStream.read(buffer, 0, BYTES_BUFFER_LENGTH)) != -1; ) {
@@ -52,7 +54,8 @@ public static byte[] zstdCompress(byte[] original) {
5254
}
5355

5456
public static String zstdDecompress(InputStream inputStream, Charset charsetName) {
55-
try (ZstdInputStreamNoFinalizer zstdInputStream = new ZstdInputStreamNoFinalizer(inputStream);
57+
try (ZstdInputStreamNoFinalizer zstdInputStream = new ZstdInputStreamNoFinalizer(inputStream,
58+
RecyclingBufferPool.INSTANCE);
5659
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(inputStream.available())) {
5760

5861
byte[] buffer = new byte[BYTES_BUFFER_LENGTH];
@@ -70,22 +73,4 @@ public static String zstdDecompress(InputStream inputStream, Charset charsetName
7073
public static String zstdDecompress(byte[] bytes, Charset charsetName) {
7174
return zstdDecompress(new ByteArrayInputStream(bytes), charsetName);
7275
}
73-
74-
public static class ZstdInputStreamNoFinalizer extends ZstdInputStream {
75-
ZstdInputStreamNoFinalizer(InputStream inputStream) throws IOException {
76-
super(inputStream);
77-
}
78-
79-
@Override
80-
public void finalize() { }
81-
}
82-
83-
public static class ZstdOutputStreamNoFinalizer extends ZstdOutputStream {
84-
public ZstdOutputStreamNoFinalizer(OutputStream outStream) throws IOException {
85-
super(outStream);
86-
}
87-
88-
@Override
89-
public void finalize() { }
90-
}
9176
}

arex-instrumentation-foundation/src/test/java/io/arex/foundation/util/CompressUtilTest.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
44
import static org.junit.jupiter.api.Assertions.assertEquals;
5-
65
import java.nio.charset.StandardCharsets;
6+
import java.util.Base64;
77
import org.junit.jupiter.api.Test;
88

99
class CompressUtilTest {
@@ -17,4 +17,16 @@ void test() {
1717
String expected = CompressUtil.zstdDecompress(actualBytes, StandardCharsets.UTF_8);
1818
assertEquals("hello AREX", expected);
1919
}
20+
21+
@Test
22+
void testCompatible() {
23+
String oldCompressString = "KLUv/QBYJAgAltE3JDCLOAcQDrWkTCPhBm9L2vigBeJYVw+ES3bvwu/pHjBwMDDAASsAMQAtAAzxS6NLBfbeBg8o7tWvx5hO8bSXSw2cXV/"
24+
+ "uI+wqUQ6KYaSdz5dz07JD7ZG7OKMoAIimCVASSbMsidMsCYNIlCVJWDQEzg4xIIaPMoNKJyl/VTpxsy+MjVN6UCG106Nxd1IQfDzC3lGnBm20Rpz91TiM4jiMg1i"
25+
+ "cxMKurzkWtk7l50th79W3kBsk1WNzrhXoa45eZZ6ew9OOFEIasErwq3q0kOAQbbpDQnLhv8aFUqycm7ajdgwARRmAwGN29RL2nXEYEDb8ug9tmqh5KPj4mTh9ehy1EAUBAAA=";
26+
final byte[] oldCompressBytes = Base64.getDecoder().decode(oldCompressString);
27+
final String newDeCompressString = CompressUtil.zstdDecompress(oldCompressBytes, StandardCharsets.UTF_8);
28+
final byte[] newCompressBytes = CompressUtil.zstdCompress(newDeCompressString, StandardCharsets.UTF_8);
29+
String newCompressString = Base64.getEncoder().encodeToString(newCompressBytes);
30+
assertEquals(oldCompressString, newCompressString);
31+
}
2032
}

0 commit comments

Comments
 (0)