diff --git a/MYCONTRIBUTION.md b/MYCONTRIBUTION.md index 7b2c313d05..2486dc0a15 100644 --- a/MYCONTRIBUTION.md +++ b/MYCONTRIBUTION.md @@ -1 +1,7 @@ ```Clean up PR descriptions by removing comments #2017``` + +```Anubhab/1788 #2018 +``` + + + diff --git a/fury-core/README.md b/fury-core/README.md new file mode 100644 index 0000000000..26c674fd5f --- /dev/null +++ b/fury-core/README.md @@ -0,0 +1,26 @@ +# fury-core Module + +This module provides core functionalities for the FURY project. + +## Zstd Compression Integration + +This module now includes support for compressing and decompressing type metadata using the Zstd compression library. + +**Features:** + +- **Improved Compression:** Zstd generally offers better compression ratios than the previous Deflater-based implementation. +- **ZstdMetaCompressor:** A new `ZstdMetaCompressor` class has been implemented to handle Zstd compression and decompression. +- **Unit Tests:** Unit tests have been added to verify the functionality and correctness of the `ZstdMetaCompressor`. + +**Usage:** + +- To use the `ZstdMetaCompressor`, inject it into your service classes: + + ```java + @Autowired + private MetaCompressor metaCompressor; + + public void processMetadata(byte[] metadata) { + byte[] compressedMetadata = metaCompressor.compress(metadata); + // ... use compressedMetadata ... + } \ No newline at end of file diff --git a/fury-core/pom.xml b/fury-core/pom.xml new file mode 100644 index 0000000000..8690a49aea --- /dev/null +++ b/fury-core/pom.xml @@ -0,0 +1,5 @@ + + com.github.luben + zstd-jni + 1.5.2 + \ No newline at end of file diff --git a/fury-core/src/main/java/com/example/fury/core/compression/ZstdMetaCompressor.java b/fury-core/src/main/java/com/example/fury/core/compression/ZstdMetaCompressor.java new file mode 100644 index 0000000000..2763e29112 --- /dev/null +++ b/fury-core/src/main/java/com/example/fury/core/compression/ZstdMetaCompressor.java @@ -0,0 +1,24 @@ +package com.example.fury.core.compression; + +import com.github.luben.zstd.Zstd; + +public class ZstdMetaCompressor implements MetaCompressor { + + @Override + public byte[] compress(byte[] metadata) { + try { + return Zstd.compress(metadata); + } catch (Exception e) { + throw new RuntimeException("Failed to compress metadata: " + e.getMessage(), e); + } + } + + @Override + public byte[] decompress(byte[] compressedMetadata) { + try { + return Zstd.decompress(compressedMetadata); + } catch (Exception e) { + throw new RuntimeException("Failed to decompress metadata: " + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/fury-core/src/main/java/com/example/fury/core/compression/ZstdMetaCompressorTest.java b/fury-core/src/main/java/com/example/fury/core/compression/ZstdMetaCompressorTest.java new file mode 100644 index 0000000000..aa4c60a1e5 --- /dev/null +++ b/fury-core/src/main/java/com/example/fury/core/compression/ZstdMetaCompressorTest.java @@ -0,0 +1,21 @@ +package com.example.fury.core.compression; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class ZstdMetaCompressorTest { + + private final MetaCompressor compressor = new ZstdMetaCompressor(); + + @Test + public void testCompressDecompress() { + byte[] originalData = "This is some sample metadata.".getBytes(); + byte[] compressedData = compressor.compress(originalData); + byte[] decompressedData = compressor.decompress(compressedData); + + assertArrayEquals(originalData, decompressedData); + } + + // Add more test cases for different input sizes and edge cases +} \ No newline at end of file diff --git a/fury-core/src/main/java/com/example/fury/service/MyService.java b/fury-core/src/main/java/com/example/fury/service/MyService.java new file mode 100644 index 0000000000..427ca7f1ac --- /dev/null +++ b/fury-core/src/main/java/com/example/fury/service/MyService.java @@ -0,0 +1,17 @@ +package com.example.fury.service; + +import com.example.fury.core.compression.MetaCompressor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class MyService { + + @Autowired + private MetaCompressor metaCompressor; + + public void processMetadata(byte[] metadata) { + byte[] compressedMetadata = metaCompressor.compress(metadata); + // ... use compressedMetadata ... + } +} \ No newline at end of file