This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fury.git


The following commit(s) were added to refs/heads/main by this push:
     new c19bafd4 refactor(java): move methods from object serializer to 
abstract object serializer (#2140)
c19bafd4 is described below

commit c19bafd4c95fb57896da56c12367a8104819f31e
Author: Shawn Yang <[email protected]>
AuthorDate: Sun Apr 6 22:43:12 2025 +0800

    refactor(java): move methods from object serializer to abstract object 
serializer (#2140)
    
    ## What does this PR do?
    
    <!-- Describe the purpose of this PR. -->
    
    ## Related issues
    
    <!--
    Is there any related issue? Please attach here.
    
    - #xxxx0
    - #xxxx1
    - #xxxx2
    -->
    
    ## Does this PR introduce any user-facing change?
    
    <!--
    If any user-facing interface changes, please [open an
    issue](https://github.com/apache/fury/issues/new/choose) describing the
    need to do so and update the document if necessary.
    -->
    
    - [ ] Does this PR introduce any public API change?
    - [ ] Does this PR introduce any binary protocol compatibility change?
    
    ## Benchmark
    
    <!--
    When the PR has an impact on performance (if you don't know whether the
    PR will have an impact on performance, you can submit the PR first, and
    if it will have impact on performance, the code reviewer will explain
    it), be sure to attach a benchmark data here.
    -->
---
 .../fury/serializer/AbstractObjectSerializer.java  | 468 +++++++++++++++++++++
 .../fury/serializer/CompatibleSerializer.java      |   9 +-
 .../fury/serializer/MetaSharedSerializer.java      |  20 +-
 .../serializer/NonexistentClassSerializers.java    |   7 +-
 .../apache/fury/serializer/ObjectSerializer.java   | 465 --------------------
 5 files changed, 487 insertions(+), 482 deletions(-)

diff --git 
a/java/fury-core/src/main/java/org/apache/fury/serializer/AbstractObjectSerializer.java
 
b/java/fury-core/src/main/java/org/apache/fury/serializer/AbstractObjectSerializer.java
index f7540407..3c23e1a2 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/serializer/AbstractObjectSerializer.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/serializer/AbstractObjectSerializer.java
@@ -33,6 +33,7 @@ import java.util.stream.Collectors;
 import org.apache.fury.Fury;
 import org.apache.fury.collection.Tuple2;
 import org.apache.fury.collection.Tuple3;
+import org.apache.fury.memory.MemoryBuffer;
 import org.apache.fury.memory.Platform;
 import org.apache.fury.reflect.FieldAccessor;
 import org.apache.fury.reflect.ReflectionUtils;
@@ -41,10 +42,12 @@ import org.apache.fury.resolver.ClassInfo;
 import org.apache.fury.resolver.ClassInfoHolder;
 import org.apache.fury.resolver.ClassResolver;
 import org.apache.fury.resolver.RefResolver;
+import org.apache.fury.resolver.TypeResolver;
 import org.apache.fury.type.Descriptor;
 import org.apache.fury.type.DescriptorGrouper;
 import org.apache.fury.type.FinalObjectTypeStub;
 import org.apache.fury.type.GenericType;
+import org.apache.fury.type.Generics;
 import org.apache.fury.util.record.RecordComponent;
 import org.apache.fury.util.record.RecordInfo;
 import org.apache.fury.util.record.RecordUtils;
@@ -74,6 +77,471 @@ public abstract class AbstractObjectSerializer<T> extends 
Serializer<T> {
     this.constructor = constructor;
   }
 
+  /**
+   * Read final object field value. Note that primitive field value can't be 
read by this method,
+   * because primitive field doesn't write null flag.
+   */
+  static Object readFinalObjectFieldValue(
+      SerializationBinding binding,
+      RefResolver refResolver,
+      TypeResolver typeResolver,
+      FinalTypeField fieldInfo,
+      boolean isFinal,
+      MemoryBuffer buffer) {
+    Serializer<Object> serializer = fieldInfo.classInfo.getSerializer();
+    Object fieldValue;
+    if (isFinal) {
+      if (!fieldInfo.trackingRef) {
+        return binding.readNullable(buffer, serializer);
+      }
+      // whether tracking ref is recorded in `fieldInfo.serializer`, so it's 
still
+      // consistent with jit serializer.
+      fieldValue = binding.readRef(buffer, serializer);
+    } else {
+      if (serializer.needToWriteRef()) {
+        int nextReadRefId = refResolver.tryPreserveRefId(buffer);
+        if (nextReadRefId >= Fury.NOT_NULL_VALUE_FLAG) {
+          typeResolver.readClassInfo(buffer, fieldInfo.classInfo);
+          fieldValue = serializer.read(buffer);
+          refResolver.setReadObject(nextReadRefId, fieldValue);
+        } else {
+          fieldValue = refResolver.getReadObject();
+        }
+      } else {
+        byte headFlag = buffer.readByte();
+        if (headFlag == Fury.NULL_FLAG) {
+          fieldValue = null;
+        } else {
+          typeResolver.readClassInfo(buffer, fieldInfo.classInfo);
+          fieldValue = serializer.read(buffer);
+        }
+      }
+    }
+    return fieldValue;
+  }
+
+  static Object readOtherFieldValue(
+      SerializationBinding binding, GenericTypeField fieldInfo, MemoryBuffer 
buffer) {
+    Object fieldValue;
+    if (fieldInfo.trackingRef) {
+      fieldValue = binding.readRef(buffer, fieldInfo.classInfoHolder);
+    } else {
+      byte headFlag = buffer.readByte();
+      if (headFlag == Fury.NULL_FLAG) {
+        fieldValue = null;
+      } else {
+        fieldValue = binding.readNonRef(buffer, fieldInfo.classInfoHolder);
+      }
+    }
+    return fieldValue;
+  }
+
+  static Object readContainerFieldValue(
+      SerializationBinding binding,
+      Generics generics,
+      GenericTypeField fieldInfo,
+      MemoryBuffer buffer) {
+    Object fieldValue;
+    if (fieldInfo.trackingRef) {
+      generics.pushGenericType(fieldInfo.genericType);
+      fieldValue = binding.readRef(buffer, fieldInfo.classInfoHolder);
+      generics.popGenericType();
+    } else {
+      byte headFlag = buffer.readByte();
+      if (headFlag == Fury.NULL_FLAG) {
+        fieldValue = null;
+      } else {
+        generics.pushGenericType(fieldInfo.genericType);
+        fieldValue = binding.readNonRef(buffer, fieldInfo.classInfoHolder);
+        generics.popGenericType();
+      }
+    }
+    return fieldValue;
+  }
+
+  static boolean writePrimitiveFieldValueFailed(
+      Fury fury,
+      MemoryBuffer buffer,
+      Object targetObject,
+      FieldAccessor fieldAccessor,
+      short classId) {
+    long fieldOffset = fieldAccessor.getFieldOffset();
+    if (fieldOffset != -1) {
+      return writePrimitiveFieldValueFailed(fury, buffer, targetObject, 
fieldOffset, classId);
+    }
+    switch (classId) {
+      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
+        buffer.writeBoolean((Boolean) fieldAccessor.get(targetObject));
+        return false;
+      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
+        buffer.writeByte((Byte) fieldAccessor.get(targetObject));
+        return false;
+      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
+        buffer.writeChar((Character) fieldAccessor.get(targetObject));
+        return false;
+      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
+        buffer.writeInt16((Short) fieldAccessor.get(targetObject));
+        return false;
+      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
+        {
+          int fieldValue = (Integer) fieldAccessor.get(targetObject);
+          if (fury.compressInt()) {
+            buffer.writeVarInt32(fieldValue);
+          } else {
+            buffer.writeInt32(fieldValue);
+          }
+          return false;
+        }
+      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
+        buffer.writeFloat32((Float) fieldAccessor.get(targetObject));
+        return false;
+      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
+        {
+          long fieldValue = (long) fieldAccessor.get(targetObject);
+          fury.writeInt64(buffer, fieldValue);
+          return false;
+        }
+      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
+        buffer.writeFloat64((Double) fieldAccessor.get(targetObject));
+        return false;
+      default:
+        return true;
+    }
+  }
+
+  static boolean writePrimitiveFieldValueFailed(
+      Fury fury, MemoryBuffer buffer, Object targetObject, long fieldOffset, 
short classId) {
+    switch (classId) {
+      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
+        buffer.writeBoolean(Platform.getBoolean(targetObject, fieldOffset));
+        return false;
+      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
+        buffer.writeByte(Platform.getByte(targetObject, fieldOffset));
+        return false;
+      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
+        buffer.writeChar(Platform.getChar(targetObject, fieldOffset));
+        return false;
+      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
+        buffer.writeInt16(Platform.getShort(targetObject, fieldOffset));
+        return false;
+      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
+        {
+          int fieldValue = Platform.getInt(targetObject, fieldOffset);
+          if (fury.compressInt()) {
+            buffer.writeVarInt32(fieldValue);
+          } else {
+            buffer.writeInt32(fieldValue);
+          }
+          return false;
+        }
+      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
+        buffer.writeFloat32(Platform.getFloat(targetObject, fieldOffset));
+        return false;
+      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
+        {
+          long fieldValue = Platform.getLong(targetObject, fieldOffset);
+          fury.writeInt64(buffer, fieldValue);
+          return false;
+        }
+      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
+        buffer.writeFloat64(Platform.getDouble(targetObject, fieldOffset));
+        return false;
+      default:
+        return true;
+    }
+  }
+
+  /**
+   * Write field value to buffer.
+   *
+   * @return true if field value isn't written by this function.
+   */
+  static boolean writeBasicObjectFieldValueFailed(
+      Fury fury, MemoryBuffer buffer, Object fieldValue, short classId) {
+    if (!fury.isBasicTypesRefIgnored()) {
+      return true; // let common path handle this.
+    }
+    // add time types serialization here.
+    switch (classId) {
+      case ClassResolver.STRING_CLASS_ID: // fastpath for string.
+        fury.writeJavaStringRef(buffer, (String) (fieldValue));
+        return false;
+      case ClassResolver.BOOLEAN_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            buffer.writeBoolean((Boolean) (fieldValue));
+          }
+          return false;
+        }
+      case ClassResolver.BYTE_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            buffer.writeByte((Byte) (fieldValue));
+          }
+          return false;
+        }
+      case ClassResolver.CHAR_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            buffer.writeChar((Character) (fieldValue));
+          }
+          return false;
+        }
+      case ClassResolver.SHORT_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            buffer.writeInt16((Short) (fieldValue));
+          }
+          return false;
+        }
+      case ClassResolver.INTEGER_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            if (fury.compressInt()) {
+              buffer.writeVarInt32((Integer) (fieldValue));
+            } else {
+              buffer.writeInt32((Integer) (fieldValue));
+            }
+          }
+          return false;
+        }
+      case ClassResolver.FLOAT_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            buffer.writeFloat32((Float) (fieldValue));
+          }
+          return false;
+        }
+      case ClassResolver.LONG_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            fury.writeInt64(buffer, (Long) fieldValue);
+          }
+          return false;
+        }
+      case ClassResolver.DOUBLE_CLASS_ID:
+        {
+          if (fieldValue == null) {
+            buffer.writeByte(Fury.NULL_FLAG);
+          } else {
+            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
+            buffer.writeFloat64((Double) (fieldValue));
+          }
+          return false;
+        }
+      default:
+        return true;
+    }
+  }
+
+  /**
+   * Read a primitive value from buffer and set it to field referenced by 
<code>fieldAccessor</code>
+   * of <code>targetObject</code>.
+   *
+   * @return true if <code>classId</code> is not a primitive type id.
+   */
+  static boolean readPrimitiveFieldValueFailed(
+      Fury fury,
+      MemoryBuffer buffer,
+      Object targetObject,
+      FieldAccessor fieldAccessor,
+      short classId) {
+    long fieldOffset = fieldAccessor.getFieldOffset();
+    if (fieldOffset != -1) {
+      return readPrimitiveFieldValueFailed(fury, buffer, targetObject, 
fieldOffset, classId);
+    }
+    switch (classId) {
+      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
+        fieldAccessor.set(targetObject, buffer.readBoolean());
+        return false;
+      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
+        fieldAccessor.set(targetObject, buffer.readByte());
+        return false;
+      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
+        fieldAccessor.set(targetObject, buffer.readChar());
+        return false;
+      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
+        fieldAccessor.set(targetObject, buffer.readInt16());
+        return false;
+      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
+        if (fury.compressInt()) {
+          fieldAccessor.set(targetObject, buffer.readVarInt32());
+        } else {
+          fieldAccessor.set(targetObject, buffer.readInt32());
+        }
+        return false;
+      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
+        fieldAccessor.set(targetObject, buffer.readFloat32());
+        return false;
+      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
+        fieldAccessor.set(targetObject, fury.readInt64(buffer));
+        return false;
+      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
+        fieldAccessor.set(targetObject, buffer.readFloat64());
+        return false;
+      case ClassResolver.STRING_CLASS_ID:
+        fieldAccessor.putObject(targetObject, fury.readJavaStringRef(buffer));
+        return false;
+      default:
+        return true;
+    }
+  }
+
+  private static boolean readPrimitiveFieldValueFailed(
+      Fury fury, MemoryBuffer buffer, Object targetObject, long fieldOffset, 
short classId) {
+    switch (classId) {
+      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
+        Platform.putBoolean(targetObject, fieldOffset, buffer.readBoolean());
+        return false;
+      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
+        Platform.putByte(targetObject, fieldOffset, buffer.readByte());
+        return false;
+      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
+        Platform.putChar(targetObject, fieldOffset, buffer.readChar());
+        return false;
+      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
+        Platform.putShort(targetObject, fieldOffset, buffer.readInt16());
+        return false;
+      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
+        if (fury.compressInt()) {
+          Platform.putInt(targetObject, fieldOffset, buffer.readVarInt32());
+        } else {
+          Platform.putInt(targetObject, fieldOffset, buffer.readInt32());
+        }
+        return false;
+      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
+        Platform.putFloat(targetObject, fieldOffset, buffer.readFloat32());
+        return false;
+      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
+        Platform.putLong(targetObject, fieldOffset, fury.readInt64(buffer));
+        return false;
+      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
+        Platform.putDouble(targetObject, fieldOffset, buffer.readFloat64());
+        return false;
+      case ClassResolver.STRING_CLASS_ID:
+        Platform.putObject(targetObject, fieldOffset, 
fury.readJavaStringRef(buffer));
+        return false;
+      default:
+        return true;
+    }
+  }
+
+  static boolean readBasicObjectFieldValueFailed(
+      Fury fury,
+      MemoryBuffer buffer,
+      Object targetObject,
+      FieldAccessor fieldAccessor,
+      short classId) {
+    if (!fury.isBasicTypesRefIgnored()) {
+      return true; // let common path handle this.
+    }
+    // add time types serialization here.
+    switch (classId) {
+      case ClassResolver.STRING_CLASS_ID: // fastpath for string.
+        fieldAccessor.putObject(targetObject, fury.readJavaStringRef(buffer));
+        return false;
+      case ClassResolver.BOOLEAN_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            fieldAccessor.putObject(targetObject, buffer.readBoolean());
+          }
+          return false;
+        }
+      case ClassResolver.BYTE_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            fieldAccessor.putObject(targetObject, buffer.readByte());
+          }
+          return false;
+        }
+      case ClassResolver.CHAR_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            fieldAccessor.putObject(targetObject, buffer.readChar());
+          }
+          return false;
+        }
+      case ClassResolver.SHORT_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            fieldAccessor.putObject(targetObject, buffer.readInt16());
+          }
+          return false;
+        }
+      case ClassResolver.INTEGER_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            if (fury.compressInt()) {
+              fieldAccessor.putObject(targetObject, buffer.readVarInt32());
+            } else {
+              fieldAccessor.putObject(targetObject, buffer.readInt32());
+            }
+          }
+          return false;
+        }
+      case ClassResolver.FLOAT_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            fieldAccessor.putObject(targetObject, buffer.readFloat32());
+          }
+          return false;
+        }
+      case ClassResolver.LONG_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            fieldAccessor.putObject(targetObject, fury.readInt64(buffer));
+          }
+          return false;
+        }
+      case ClassResolver.DOUBLE_CLASS_ID:
+        {
+          if (buffer.readByte() == Fury.NULL_FLAG) {
+            fieldAccessor.putObject(targetObject, null);
+          } else {
+            fieldAccessor.putObject(targetObject, buffer.readFloat64());
+          }
+          return false;
+        }
+      default:
+        return true;
+    }
+  }
+
   @Override
   public T copy(T originObj) {
     if (immutable) {
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/serializer/CompatibleSerializer.java
 
b/java/fury-core/src/main/java/org/apache/fury/serializer/CompatibleSerializer.java
index 0638ff3b..0ba59788 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/serializer/CompatibleSerializer.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/serializer/CompatibleSerializer.java
@@ -130,11 +130,12 @@ public final class CompatibleSerializer<T> extends 
CompatibleSerializerBase<T> {
       MemoryBuffer buffer, FieldResolver.FieldInfo fieldInfo, Object 
targetObject) {
     FieldAccessor fieldAccessor = fieldInfo.getFieldAccessor();
     short classId = fieldInfo.getEmbeddedClassId();
-    if (ObjectSerializer.writePrimitiveFieldValueFailed(
+    if (AbstractObjectSerializer.writePrimitiveFieldValueFailed(
         fury, buffer, targetObject, fieldAccessor, classId)) {
       Object fieldValue;
       fieldValue = fieldAccessor.getObject(targetObject);
-      if (ObjectSerializer.writeBasicObjectFieldValueFailed(fury, buffer, 
fieldValue, classId)) {
+      if (AbstractObjectSerializer.writeBasicObjectFieldValueFailed(
+          fury, buffer, fieldValue, classId)) {
         if (classId == ClassResolver.NO_CLASS_ID) { // SEPARATE_TYPES_HASH
           writeSeparateFieldValue(fieldInfo, buffer, fieldValue);
         } else {
@@ -558,9 +559,9 @@ public final class CompatibleSerializer<T> extends 
CompatibleSerializerBase<T> {
       FieldResolver.FieldInfo fieldInfo, MemoryBuffer buffer, Object 
targetObject) {
     FieldAccessor fieldAccessor = fieldInfo.getFieldAccessor();
     short classId = fieldInfo.getEmbeddedClassId();
-    if (ObjectSerializer.readPrimitiveFieldValueFailed(
+    if (AbstractObjectSerializer.readPrimitiveFieldValueFailed(
             fury, buffer, targetObject, fieldAccessor, classId)
-        && ObjectSerializer.readBasicObjectFieldValueFailed(
+        && AbstractObjectSerializer.readBasicObjectFieldValueFailed(
             fury, buffer, targetObject, fieldAccessor, classId)) {
       if (classId == ClassResolver.NO_CLASS_ID) {
         // SEPARATE_TYPES_HASH
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/serializer/MetaSharedSerializer.java
 
b/java/fury-core/src/main/java/org/apache/fury/serializer/MetaSharedSerializer.java
index 2eb1960f..1d46bfbf 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/serializer/MetaSharedSerializer.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/serializer/MetaSharedSerializer.java
@@ -153,13 +153,13 @@ public class MetaSharedSerializer<T> extends 
AbstractObjectSerializer<T> {
       FieldAccessor fieldAccessor = fieldInfo.fieldAccessor;
       if (fieldAccessor != null) {
         short classId = fieldInfo.classId;
-        if (ObjectSerializer.readPrimitiveFieldValueFailed(
+        if (AbstractObjectSerializer.readPrimitiveFieldValueFailed(
                 fury, buffer, obj, fieldAccessor, classId)
-            && ObjectSerializer.readBasicObjectFieldValueFailed(
+            && AbstractObjectSerializer.readBasicObjectFieldValueFailed(
                 fury, buffer, obj, fieldAccessor, classId)) {
           assert fieldInfo.classInfo != null;
           Object fieldValue =
-              ObjectSerializer.readFinalObjectFieldValue(
+              AbstractObjectSerializer.readFinalObjectFieldValue(
                   binding, refResolver, classResolver, fieldInfo, isFinal, 
buffer);
           fieldAccessor.putObject(obj, fieldValue);
         }
@@ -169,14 +169,14 @@ public class MetaSharedSerializer<T> extends 
AbstractObjectSerializer<T> {
             // TODO(chaokunyang) support registered serializer in peer with 
ref tracking disabled.
             fury.readRef(buffer, classInfoHolder);
           } else {
-            ObjectSerializer.readFinalObjectFieldValue(
+            AbstractObjectSerializer.readFinalObjectFieldValue(
                 binding, refResolver, classResolver, fieldInfo, isFinal, 
buffer);
           }
         }
       }
     }
     for (ObjectSerializer.GenericTypeField fieldInfo : otherFields) {
-      Object fieldValue = ObjectSerializer.readOtherFieldValue(binding, 
fieldInfo, buffer);
+      Object fieldValue = 
AbstractObjectSerializer.readOtherFieldValue(binding, fieldInfo, buffer);
       FieldAccessor fieldAccessor = fieldInfo.fieldAccessor;
       if (fieldAccessor != null) {
         fieldAccessor.putObject(obj, fieldValue);
@@ -185,7 +185,7 @@ public class MetaSharedSerializer<T> extends 
AbstractObjectSerializer<T> {
     Generics generics = fury.getGenerics();
     for (ObjectSerializer.GenericTypeField fieldInfo : containerFields) {
       Object fieldValue =
-          ObjectSerializer.readContainerFieldValue(binding, generics, 
fieldInfo, buffer);
+          AbstractObjectSerializer.readContainerFieldValue(binding, generics, 
fieldInfo, buffer);
       FieldAccessor fieldAccessor = fieldInfo.fieldAccessor;
       if (fieldAccessor != null) {
         fieldAccessor.putObject(obj, fieldValue);
@@ -214,7 +214,7 @@ public class MetaSharedSerializer<T> extends 
AbstractObjectSerializer<T> {
           fields[counter++] = Serializers.readPrimitiveValue(fury, buffer, 
classId);
         } else {
           Object fieldValue =
-              ObjectSerializer.readFinalObjectFieldValue(
+              AbstractObjectSerializer.readFinalObjectFieldValue(
                   binding, refResolver, classResolver, fieldInfo, isFinal, 
buffer);
           fields[counter++] = fieldValue;
         }
@@ -224,7 +224,7 @@ public class MetaSharedSerializer<T> extends 
AbstractObjectSerializer<T> {
             // TODO(chaokunyang) support registered serializer in peer with 
ref tracking disabled.
             fury.readRef(buffer, classInfoHolder);
           } else {
-            ObjectSerializer.readFinalObjectFieldValue(
+            AbstractObjectSerializer.readFinalObjectFieldValue(
                 binding, refResolver, classResolver, fieldInfo, isFinal, 
buffer);
           }
         }
@@ -232,13 +232,13 @@ public class MetaSharedSerializer<T> extends 
AbstractObjectSerializer<T> {
       }
     }
     for (ObjectSerializer.GenericTypeField fieldInfo : otherFields) {
-      Object fieldValue = ObjectSerializer.readOtherFieldValue(binding, 
fieldInfo, buffer);
+      Object fieldValue = 
AbstractObjectSerializer.readOtherFieldValue(binding, fieldInfo, buffer);
       fields[counter++] = fieldValue;
     }
     Generics generics = fury.getGenerics();
     for (ObjectSerializer.GenericTypeField fieldInfo : containerFields) {
       Object fieldValue =
-          ObjectSerializer.readContainerFieldValue(binding, generics, 
fieldInfo, buffer);
+          AbstractObjectSerializer.readContainerFieldValue(binding, generics, 
fieldInfo, buffer);
       fields[counter++] = fieldValue;
     }
   }
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/serializer/NonexistentClassSerializers.java
 
b/java/fury-core/src/main/java/org/apache/fury/serializer/NonexistentClassSerializers.java
index 26d48f1b..9ec243ab 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/serializer/NonexistentClassSerializers.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/serializer/NonexistentClassSerializers.java
@@ -206,20 +206,21 @@ public final class NonexistentClassSerializers {
             fieldValue = fieldInfo.classInfo.getSerializer().read(buffer);
           } else {
             fieldValue =
-                ObjectSerializer.readFinalObjectFieldValue(
+                AbstractObjectSerializer.readFinalObjectFieldValue(
                     binding, refResolver, classResolver, fieldInfo, 
isFinal[i], buffer);
           }
         }
         entries.add(new MapEntry(fieldInfo.qualifiedFieldName, fieldValue));
       }
       for (ObjectSerializer.GenericTypeField fieldInfo : 
fieldsInfo.otherFields) {
-        Object fieldValue = ObjectSerializer.readOtherFieldValue(binding, 
fieldInfo, buffer);
+        Object fieldValue =
+            AbstractObjectSerializer.readOtherFieldValue(binding, fieldInfo, 
buffer);
         entries.add(new MapEntry(fieldInfo.qualifiedFieldName, fieldValue));
       }
       Generics generics = fury.getGenerics();
       for (ObjectSerializer.GenericTypeField fieldInfo : 
fieldsInfo.containerFields) {
         Object fieldValue =
-            ObjectSerializer.readContainerFieldValue(binding, generics, 
fieldInfo, buffer);
+            AbstractObjectSerializer.readContainerFieldValue(binding, 
generics, fieldInfo, buffer);
         entries.add(new MapEntry(fieldInfo.qualifiedFieldName, fieldValue));
       }
       obj.setEntries(entries);
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/serializer/ObjectSerializer.java 
b/java/fury-core/src/main/java/org/apache/fury/serializer/ObjectSerializer.java
index 0d255bb9..f3bc5185 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/serializer/ObjectSerializer.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/serializer/ObjectSerializer.java
@@ -324,471 +324,6 @@ public final class ObjectSerializer<T> extends 
AbstractObjectSerializer<T> {
     return obj;
   }
 
-  /**
-   * Read final object field value. Note that primitive field value can't be 
read by this method,
-   * because primitive field doesn't write null flag.
-   */
-  static Object readFinalObjectFieldValue(
-      SerializationBinding binding,
-      RefResolver refResolver,
-      TypeResolver typeResolver,
-      FinalTypeField fieldInfo,
-      boolean isFinal,
-      MemoryBuffer buffer) {
-    Serializer<Object> serializer = fieldInfo.classInfo.getSerializer();
-    Object fieldValue;
-    if (isFinal) {
-      if (!fieldInfo.trackingRef) {
-        return binding.readNullable(buffer, serializer);
-      }
-      // whether tracking ref is recorded in `fieldInfo.serializer`, so it's 
still
-      // consistent with jit serializer.
-      fieldValue = binding.readRef(buffer, serializer);
-    } else {
-      if (serializer.needToWriteRef()) {
-        int nextReadRefId = refResolver.tryPreserveRefId(buffer);
-        if (nextReadRefId >= Fury.NOT_NULL_VALUE_FLAG) {
-          typeResolver.readClassInfo(buffer, fieldInfo.classInfo);
-          fieldValue = serializer.read(buffer);
-          refResolver.setReadObject(nextReadRefId, fieldValue);
-        } else {
-          fieldValue = refResolver.getReadObject();
-        }
-      } else {
-        byte headFlag = buffer.readByte();
-        if (headFlag == Fury.NULL_FLAG) {
-          fieldValue = null;
-        } else {
-          typeResolver.readClassInfo(buffer, fieldInfo.classInfo);
-          fieldValue = serializer.read(buffer);
-        }
-      }
-    }
-    return fieldValue;
-  }
-
-  static Object readOtherFieldValue(
-      SerializationBinding binding, GenericTypeField fieldInfo, MemoryBuffer 
buffer) {
-    Object fieldValue;
-    if (fieldInfo.trackingRef) {
-      fieldValue = binding.readRef(buffer, fieldInfo.classInfoHolder);
-    } else {
-      byte headFlag = buffer.readByte();
-      if (headFlag == Fury.NULL_FLAG) {
-        fieldValue = null;
-      } else {
-        fieldValue = binding.readNonRef(buffer, fieldInfo.classInfoHolder);
-      }
-    }
-    return fieldValue;
-  }
-
-  static Object readContainerFieldValue(
-      SerializationBinding binding,
-      Generics generics,
-      GenericTypeField fieldInfo,
-      MemoryBuffer buffer) {
-    Object fieldValue;
-    if (fieldInfo.trackingRef) {
-      generics.pushGenericType(fieldInfo.genericType);
-      fieldValue = binding.readRef(buffer, fieldInfo.classInfoHolder);
-      generics.popGenericType();
-    } else {
-      byte headFlag = buffer.readByte();
-      if (headFlag == Fury.NULL_FLAG) {
-        fieldValue = null;
-      } else {
-        generics.pushGenericType(fieldInfo.genericType);
-        fieldValue = binding.readNonRef(buffer, fieldInfo.classInfoHolder);
-        generics.popGenericType();
-      }
-    }
-    return fieldValue;
-  }
-
-  static boolean writePrimitiveFieldValueFailed(
-      Fury fury,
-      MemoryBuffer buffer,
-      Object targetObject,
-      FieldAccessor fieldAccessor,
-      short classId) {
-    long fieldOffset = fieldAccessor.getFieldOffset();
-    if (fieldOffset != -1) {
-      return writePrimitiveFieldValueFailed(fury, buffer, targetObject, 
fieldOffset, classId);
-    }
-    switch (classId) {
-      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
-        buffer.writeBoolean((Boolean) fieldAccessor.get(targetObject));
-        return false;
-      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
-        buffer.writeByte((Byte) fieldAccessor.get(targetObject));
-        return false;
-      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
-        buffer.writeChar((Character) fieldAccessor.get(targetObject));
-        return false;
-      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
-        buffer.writeInt16((Short) fieldAccessor.get(targetObject));
-        return false;
-      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
-        {
-          int fieldValue = (Integer) fieldAccessor.get(targetObject);
-          if (fury.compressInt()) {
-            buffer.writeVarInt32(fieldValue);
-          } else {
-            buffer.writeInt32(fieldValue);
-          }
-          return false;
-        }
-      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
-        buffer.writeFloat32((Float) fieldAccessor.get(targetObject));
-        return false;
-      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
-        {
-          long fieldValue = (long) fieldAccessor.get(targetObject);
-          fury.writeInt64(buffer, fieldValue);
-          return false;
-        }
-      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
-        buffer.writeFloat64((Double) fieldAccessor.get(targetObject));
-        return false;
-      default:
-        return true;
-    }
-  }
-
-  static boolean writePrimitiveFieldValueFailed(
-      Fury fury, MemoryBuffer buffer, Object targetObject, long fieldOffset, 
short classId) {
-    switch (classId) {
-      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
-        buffer.writeBoolean(Platform.getBoolean(targetObject, fieldOffset));
-        return false;
-      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
-        buffer.writeByte(Platform.getByte(targetObject, fieldOffset));
-        return false;
-      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
-        buffer.writeChar(Platform.getChar(targetObject, fieldOffset));
-        return false;
-      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
-        buffer.writeInt16(Platform.getShort(targetObject, fieldOffset));
-        return false;
-      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
-        {
-          int fieldValue = Platform.getInt(targetObject, fieldOffset);
-          if (fury.compressInt()) {
-            buffer.writeVarInt32(fieldValue);
-          } else {
-            buffer.writeInt32(fieldValue);
-          }
-          return false;
-        }
-      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
-        buffer.writeFloat32(Platform.getFloat(targetObject, fieldOffset));
-        return false;
-      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
-        {
-          long fieldValue = Platform.getLong(targetObject, fieldOffset);
-          fury.writeInt64(buffer, fieldValue);
-          return false;
-        }
-      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
-        buffer.writeFloat64(Platform.getDouble(targetObject, fieldOffset));
-        return false;
-      default:
-        return true;
-    }
-  }
-
-  /**
-   * Write field value to buffer.
-   *
-   * @return true if field value isn't written by this function.
-   */
-  static boolean writeBasicObjectFieldValueFailed(
-      Fury fury, MemoryBuffer buffer, Object fieldValue, short classId) {
-    if (!fury.isBasicTypesRefIgnored()) {
-      return true; // let common path handle this.
-    }
-    // add time types serialization here.
-    switch (classId) {
-      case ClassResolver.STRING_CLASS_ID: // fastpath for string.
-        fury.writeJavaStringRef(buffer, (String) (fieldValue));
-        return false;
-      case ClassResolver.BOOLEAN_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            buffer.writeBoolean((Boolean) (fieldValue));
-          }
-          return false;
-        }
-      case ClassResolver.BYTE_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            buffer.writeByte((Byte) (fieldValue));
-          }
-          return false;
-        }
-      case ClassResolver.CHAR_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            buffer.writeChar((Character) (fieldValue));
-          }
-          return false;
-        }
-      case ClassResolver.SHORT_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            buffer.writeInt16((Short) (fieldValue));
-          }
-          return false;
-        }
-      case ClassResolver.INTEGER_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            if (fury.compressInt()) {
-              buffer.writeVarInt32((Integer) (fieldValue));
-            } else {
-              buffer.writeInt32((Integer) (fieldValue));
-            }
-          }
-          return false;
-        }
-      case ClassResolver.FLOAT_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            buffer.writeFloat32((Float) (fieldValue));
-          }
-          return false;
-        }
-      case ClassResolver.LONG_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            fury.writeInt64(buffer, (Long) fieldValue);
-          }
-          return false;
-        }
-      case ClassResolver.DOUBLE_CLASS_ID:
-        {
-          if (fieldValue == null) {
-            buffer.writeByte(Fury.NULL_FLAG);
-          } else {
-            buffer.writeByte(Fury.NOT_NULL_VALUE_FLAG);
-            buffer.writeFloat64((Double) (fieldValue));
-          }
-          return false;
-        }
-      default:
-        return true;
-    }
-  }
-
-  /**
-   * Read a primitive value from buffer and set it to field referenced by 
<code>fieldAccessor</code>
-   * of <code>targetObject</code>.
-   *
-   * @return true if <code>classId</code> is not a primitive type id.
-   */
-  static boolean readPrimitiveFieldValueFailed(
-      Fury fury,
-      MemoryBuffer buffer,
-      Object targetObject,
-      FieldAccessor fieldAccessor,
-      short classId) {
-    long fieldOffset = fieldAccessor.getFieldOffset();
-    if (fieldOffset != -1) {
-      return readPrimitiveFieldValueFailed(fury, buffer, targetObject, 
fieldOffset, classId);
-    }
-    switch (classId) {
-      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
-        fieldAccessor.set(targetObject, buffer.readBoolean());
-        return false;
-      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
-        fieldAccessor.set(targetObject, buffer.readByte());
-        return false;
-      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
-        fieldAccessor.set(targetObject, buffer.readChar());
-        return false;
-      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
-        fieldAccessor.set(targetObject, buffer.readInt16());
-        return false;
-      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
-        if (fury.compressInt()) {
-          fieldAccessor.set(targetObject, buffer.readVarInt32());
-        } else {
-          fieldAccessor.set(targetObject, buffer.readInt32());
-        }
-        return false;
-      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
-        fieldAccessor.set(targetObject, buffer.readFloat32());
-        return false;
-      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
-        fieldAccessor.set(targetObject, fury.readInt64(buffer));
-        return false;
-      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
-        fieldAccessor.set(targetObject, buffer.readFloat64());
-        return false;
-      case ClassResolver.STRING_CLASS_ID:
-        fieldAccessor.putObject(targetObject, fury.readJavaStringRef(buffer));
-        return false;
-      default:
-        return true;
-    }
-  }
-
-  private static boolean readPrimitiveFieldValueFailed(
-      Fury fury, MemoryBuffer buffer, Object targetObject, long fieldOffset, 
short classId) {
-    switch (classId) {
-      case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
-        Platform.putBoolean(targetObject, fieldOffset, buffer.readBoolean());
-        return false;
-      case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
-        Platform.putByte(targetObject, fieldOffset, buffer.readByte());
-        return false;
-      case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
-        Platform.putChar(targetObject, fieldOffset, buffer.readChar());
-        return false;
-      case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
-        Platform.putShort(targetObject, fieldOffset, buffer.readInt16());
-        return false;
-      case ClassResolver.PRIMITIVE_INT_CLASS_ID:
-        if (fury.compressInt()) {
-          Platform.putInt(targetObject, fieldOffset, buffer.readVarInt32());
-        } else {
-          Platform.putInt(targetObject, fieldOffset, buffer.readInt32());
-        }
-        return false;
-      case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
-        Platform.putFloat(targetObject, fieldOffset, buffer.readFloat32());
-        return false;
-      case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
-        Platform.putLong(targetObject, fieldOffset, fury.readInt64(buffer));
-        return false;
-      case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
-        Platform.putDouble(targetObject, fieldOffset, buffer.readFloat64());
-        return false;
-      case ClassResolver.STRING_CLASS_ID:
-        Platform.putObject(targetObject, fieldOffset, 
fury.readJavaStringRef(buffer));
-        return false;
-      default:
-        return true;
-    }
-  }
-
-  static boolean readBasicObjectFieldValueFailed(
-      Fury fury,
-      MemoryBuffer buffer,
-      Object targetObject,
-      FieldAccessor fieldAccessor,
-      short classId) {
-    if (!fury.isBasicTypesRefIgnored()) {
-      return true; // let common path handle this.
-    }
-    // add time types serialization here.
-    switch (classId) {
-      case ClassResolver.STRING_CLASS_ID: // fastpath for string.
-        fieldAccessor.putObject(targetObject, fury.readJavaStringRef(buffer));
-        return false;
-      case ClassResolver.BOOLEAN_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            fieldAccessor.putObject(targetObject, buffer.readBoolean());
-          }
-          return false;
-        }
-      case ClassResolver.BYTE_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            fieldAccessor.putObject(targetObject, buffer.readByte());
-          }
-          return false;
-        }
-      case ClassResolver.CHAR_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            fieldAccessor.putObject(targetObject, buffer.readChar());
-          }
-          return false;
-        }
-      case ClassResolver.SHORT_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            fieldAccessor.putObject(targetObject, buffer.readInt16());
-          }
-          return false;
-        }
-      case ClassResolver.INTEGER_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            if (fury.compressInt()) {
-              fieldAccessor.putObject(targetObject, buffer.readVarInt32());
-            } else {
-              fieldAccessor.putObject(targetObject, buffer.readInt32());
-            }
-          }
-          return false;
-        }
-      case ClassResolver.FLOAT_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            fieldAccessor.putObject(targetObject, buffer.readFloat32());
-          }
-          return false;
-        }
-      case ClassResolver.LONG_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            fieldAccessor.putObject(targetObject, fury.readInt64(buffer));
-          }
-          return false;
-        }
-      case ClassResolver.DOUBLE_CLASS_ID:
-        {
-          if (buffer.readByte() == Fury.NULL_FLAG) {
-            fieldAccessor.putObject(targetObject, null);
-          } else {
-            fieldAccessor.putObject(targetObject, buffer.readFloat64());
-          }
-          return false;
-        }
-      default:
-        return true;
-    }
-  }
-
   public static int computeVersionHash(Collection<Descriptor> descriptors) {
     // TODO(chaokunyang) use murmurhash
     List<Integer> list = new ArrayList<>();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to