chaokunyang commented on issue #1972:
URL: https://github.com/apache/fury/issues/1972#issuecomment-2569039541

   > after further read, seems serializeJavaObject API already write class def. 
which meta are you refering to? maybe if you can help to share some context or 
pointer it will be much help
   > 
   > * 
https://github.com/apache/fury/blob/b43d521fa0eb29cc97fc60f4d7bfa4171c993c6a/java/fury-core/src/main/java/org/apache/fury/Fury.java#L1072
   > * 
https://github.com/apache/fury/blob/b43d521fa0eb29cc97fc60f4d7bfa4171c993c6a/java/fury-core/src/main/java/org/apache/fury/Fury.java#L1078
   > 
   > thank you
   
   It didn't write class def, the correct code should looks like following:
   ```java
     public void serializeJavaObject(MemoryBuffer buffer, Object obj) {
       try {
         jitContext.lock();
         if (depth != 0) {
           throwDepthSerializationException();
         }
         if (config.isMetaShareEnabled()) {
           int startOffset = buffer.writerIndex();
           buffer.writeInt32(-1); // preserve 4-byte for meta start offsets.
           if (!refResolver.writeRefOrNull(buffer, obj)) {
             ClassInfo classInfo = 
classResolver.getOrUpdateClassInfo(obj.getClass());
             classResolver.writeClass(buffer, classInfo);
             writeData(buffer, classInfo, obj);
   ```
   ```java
     public <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls) {
       try {
         jitContext.lock();
         if (depth != 0) {
           throwDepthDeserializationException();
         }
         if (shareMeta) {
           readClassDefs(buffer);
         }
         T obj;
         int nextReadRefId = refResolver.tryPreserveRefId(buffer);
         if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
           ClassInfo classInfo;
           if (shareMeta) {
             classInfo = classResolver.readClassInfo(buffer);
           } else {
             classInfo = classResolver.getClassInfo(cls);
           }
           obj = (T) readDataInternal(buffer, classInfo);
           return obj;
         } else {
           return null;
         }
   ```
   
   And when deserializing, you must register class by id to setup class mapping:
   ```java
     static BaseFury s = Fury.builder()
       .withRefTracking(true)
       .withCompatibleMode(CompatibleMode.COMPATIBLE)
       .requireClassRegistration(false)
       .serializeEnumByName(true)
       .buildThreadSafeFury();
     static BaseFury s1 = Fury.builder()
       .withRefTracking(true)
       .withCompatibleMode(CompatibleMode.COMPATIBLE)
       .requireClassRegistration(false)
       .serializeEnumByName(true)
       .buildThreadSafeFury();
   
     public static class PrivateFliedClassNumberOne {
       private boolean privateBoolean = true;
       private int privateInt = 10;
       private String privateString = "notNull";
       private Map<String, String> privateMap = ofHashMap("a", "b");
       private List<String> privateList = ofArrayList("l");
       private PrivateFieldSubClass privateFieldSubClass = new 
PrivateFieldSubClass();
     }
   
     public static class PrivateFliedClassNumberTwoWithMissingField {
   
       private Map<String, String> privateMap = ofHashMap("a", "b");
       private int privateInt = 10;
       private PrivateFieldSubClass privateFieldSubClass = new 
PrivateFieldSubClass();
       private List<String> privateList = ofArrayList("l");
       private boolean privateBoolean = true;
     }
   
     private static class PrivateFieldSubClass{}
   
     @Test
     public void test() {
       PrivateFliedClassNumberOne privateField = new 
PrivateFliedClassNumberOne();
       s.register(PrivateFliedClassNumberOne.class);
       byte[] serialized = s.serializeJavaObject(privateField);
   
       s1.register(PrivateFliedClassNumberTwoWithMissingField.class);
       PrivateFliedClassNumberTwoWithMissingField privateField2 = 
s1.deserializeJavaObject(
         serialized,
         PrivateFliedClassNumberTwoWithMissingField.class
       );
     }
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to