diff --git a/java/fury-core/src/main/java/org/apache/fury/serializer/StringSerializer.java b/java/fury-core/src/main/java/org/apache/fury/serializer/StringSerializer.java index 99c34c260f..fd84c7ca3a 100644 --- a/java/fury-core/src/main/java/org/apache/fury/serializer/StringSerializer.java +++ b/java/fury-core/src/main/java/org/apache/fury/serializer/StringSerializer.java @@ -176,7 +176,11 @@ public String readString(MemoryBuffer buffer) { public Expression readStringExpr(Expression strSerializer, Expression buffer) { if (isJava) { if (STRING_VALUE_FIELD_IS_BYTES) { - return new Invoke(strSerializer, "readBytesString", STRING_TYPE, buffer); + if (compressString) { + return new Invoke(strSerializer, "readCompressedBytesString", STRING_TYPE, buffer); + } else { + return new Invoke(strSerializer, "readBytesString", STRING_TYPE, buffer); + } } else { if (!STRING_VALUE_FIELD_IS_CHARS) { throw new UnsupportedOperationException(); diff --git a/java/fury-core/src/test/java/org/apache/fury/serializer/StringSerializerTest.java b/java/fury-core/src/test/java/org/apache/fury/serializer/StringSerializerTest.java index 15c46c57f7..123f3e54e6 100644 --- a/java/fury-core/src/test/java/org/apache/fury/serializer/StringSerializerTest.java +++ b/java/fury-core/src/test/java/org/apache/fury/serializer/StringSerializerTest.java @@ -29,6 +29,7 @@ import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentLinkedQueue; +import lombok.Data; import org.apache.fury.Fury; import org.apache.fury.FuryTestBase; import org.apache.fury.collection.Tuple2; @@ -160,6 +161,35 @@ public void testJavaStringSimple() { } } + @Data + public static class Simple { + private String str; + + public Simple(String str) { + this.str = str; + } + } + + /** Test for #1984 */ + @Test + public void testJavaCompressedString() { + Fury fury = + Fury.builder() + .withStringCompressed(true) + .withLanguage(Language.JAVA) + .requireClassRegistration(false) + .build(); + + Simple a = + new Simple( + "STG@ON DEMAND Solutions@GeoComputing Switch/ Hub@Digi Edgeport/216 – 16 port Serial Hub"); + + byte[] bytes = fury.serialize(a); + + Simple b = (Simple) fury.deserialize(bytes); + assertEquals(a, b); + } + @Test(dataProvider = "stringCompress") public void testJavaString(boolean stringCompress) { Fury fury =