Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions java/fury-core/src/main/java/io/fury/Fury.java
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,59 @@ public MemoryBuffer readBufferObject(MemoryBuffer buffer) {
}
}

public void writeString(MemoryBuffer buffer, String str) {
stringSerializer.writeString(buffer, str);
}

public String readString(MemoryBuffer buffer) {
return stringSerializer.readString(buffer);
}

public void writeJavaStringRef(MemoryBuffer buffer, String str) {
if (stringSerializer.needToWriteReference()) {
if (!referenceResolver.writeReferenceOrNull(buffer, str)) {
stringSerializer.writeJavaString(buffer, str);
}
} else {
if (str == null) {
buffer.writeByte(Fury.NULL_FLAG);
} else {
buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
stringSerializer.write(buffer, str);
}
}
}

public String readJavaStringRef(MemoryBuffer buffer) {
ReferenceResolver referenceResolver = this.referenceResolver;
if (stringSerializer.needToWriteReference()) {
String obj;
int nextReadRefId = referenceResolver.tryPreserveReferenceId(buffer);
if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
obj = stringSerializer.read(buffer);
referenceResolver.setReadObject(nextReadRefId, obj);
return obj;
} else {
return (String) referenceResolver.getReadObject();
}
} else {
byte headFlag = buffer.readByte();
if (headFlag == Fury.NULL_FLAG) {
return null;
} else {
return stringSerializer.read(buffer);
}
}
}

public void writeJavaString(MemoryBuffer buffer, String str) {
stringSerializer.writeJavaString(buffer, str);
}

public String readJavaString(MemoryBuffer buffer) {
return stringSerializer.readJavaString(buffer);
}

/** Deserialize <code>obj</code> from a byte array. */
public Object deserialize(byte[] bytes) {
return deserializeInternal(MemoryUtils.wrap(bytes), null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Currency;
import java.util.IdentityHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
Expand Down Expand Up @@ -558,6 +559,23 @@ public AtomicReference read(MemoryBuffer buffer) {
}
}

public static final class CurrencySerializer extends Serializer<Currency> {
public CurrencySerializer(Fury fury) {
super(fury, Currency.class);
}

@Override
public void write(MemoryBuffer buffer, Currency object) {
fury.writeJavaString(buffer, object.getCurrencyCode());
}

@Override
public Currency read(MemoryBuffer buffer) {
String currencyCode = fury.readJavaString(buffer);
return Currency.getInstance(currencyCode);
}
}

public static final class ClassSerializer extends Serializer<Class> {
private static final byte USE_CLASS_ID = 0;
private static final byte USE_CLASSNAME = 1;
Expand Down Expand Up @@ -613,5 +631,6 @@ public static void registerDefaultSerializers(Fury fury) {
fury.registerSerializer(AtomicInteger.class, new AtomicIntegerSerializer(fury));
fury.registerSerializer(AtomicLong.class, new AtomicLongSerializer(fury));
fury.registerSerializer(AtomicReference.class, new AtomicReferenceSerializer(fury));
fury.registerSerializer(Currency.class, new CurrencySerializer(fury));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import io.fury.memory.MemoryBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Currency;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
Expand Down Expand Up @@ -141,4 +142,12 @@ public void testAtomic(Fury fury) {
.get(),
200);
}

@Test
public void testCurrency() {
Fury fury = Fury.builder().withLanguage(Language.JAVA).build();
Assert.assertEquals(
serDeCheckSerializer(fury, Currency.getInstance("EUR"), "Currency"),
Currency.getInstance("EUR"));
}
}