diff --git a/java/fury-core/src/main/java/io/fury/serializer/Serializers.java b/java/fury-core/src/main/java/io/fury/serializer/Serializers.java index 2368ed57b8..4edfaab180 100644 --- a/java/fury-core/src/main/java/io/fury/serializer/Serializers.java +++ b/java/fury-core/src/main/java/io/fury/serializer/Serializers.java @@ -29,6 +29,7 @@ import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.math.BigInteger; +import java.net.URI; import java.nio.charset.Charset; import java.util.Currency; import java.util.IdentityHashMap; @@ -592,6 +593,23 @@ public T read(MemoryBuffer buffer) { } } + public static final class URISerializer extends Serializer { + + public URISerializer(Fury fury) { + super(fury, URI.class); + } + + @Override + public void write(MemoryBuffer buffer, final URI uri) { + fury.writeString(buffer, uri.toString()); + } + + @Override + public URI read(MemoryBuffer buffer) { + return URI.create(fury.readString(buffer)); + } + } + public static final class ClassSerializer extends Serializer { private static final byte USE_CLASS_ID = 0; private static final byte USE_CLASSNAME = 1; @@ -648,5 +666,6 @@ public static void registerDefaultSerializers(Fury fury) { fury.registerSerializer(AtomicLong.class, new AtomicLongSerializer(fury)); fury.registerSerializer(AtomicReference.class, new AtomicReferenceSerializer(fury)); fury.registerSerializer(Currency.class, new CurrencySerializer(fury)); + fury.registerSerializer(URI.class, new URISerializer(fury)); } } diff --git a/java/fury-core/src/test/java/io/fury/serializer/SerializersTest.java b/java/fury-core/src/test/java/io/fury/serializer/SerializersTest.java index 9ee92a101d..f6455ed97b 100644 --- a/java/fury-core/src/test/java/io/fury/serializer/SerializersTest.java +++ b/java/fury-core/src/test/java/io/fury/serializer/SerializersTest.java @@ -26,6 +26,8 @@ import io.fury.memory.MemoryBuffer; import java.math.BigDecimal; import java.math.BigInteger; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.charset.Charset; import java.util.Currency; import java.util.concurrent.atomic.AtomicBoolean; @@ -158,4 +160,11 @@ public void testCharset() { Assert.assertEquals( serDeCheckSerializer(fury, Charset.defaultCharset(), "Charset"), Charset.defaultCharset()); } + + @Test + public void testURI() throws URISyntaxException { + Fury fury = Fury.builder().withLanguage(Language.JAVA).build(); + Assert.assertEquals(serDeCheckSerializer(fury, new URI(""), "URI"), new URI("")); + Assert.assertEquals(serDeCheckSerializer(fury, new URI("abc"), "URI"), new URI("abc")); + } }