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-site.git


The following commit(s) were added to refs/heads/main by this push:
     new 5b7b87c8 🔄 synced local 'docs/guide/' with remote 'docs/guide/'
5b7b87c8 is described below

commit 5b7b87c868028af45329015709f1c6fc1f1f576b
Author: chaokunyang <[email protected]>
AuthorDate: Tue Dec 10 00:54:01 2024 +0000

    🔄 synced local 'docs/guide/' with remote 'docs/guide/'
---
 docs/guide/java_serialization_guide.md | 51 ++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/docs/guide/java_serialization_guide.md 
b/docs/guide/java_serialization_guide.md
index cd9ac57c..52703901 100644
--- a/docs/guide/java_serialization_guide.md
+++ b/docs/guide/java_serialization_guide.md
@@ -398,6 +398,57 @@ losing any information.
 If metadata sharing is not enabled, the new class data will be skipped and an 
`NonexistentSkipClass` stub object will be
 returned.
 
+### Coping/Mapping object from one type to another type
+
+Fury support mapping object from one type to another type.
+> Notes:
+>
+> 1. This mapping will execute a deep copy, all mapped fields are serialized 
into binary and
+deserialized from that binary to map into another type.
+> 2. All struct types must be registered with same ID, otherwise Fury can not 
mapping to correct struct type.
+> Be careful when you use `Fury#register(Class)`, because fury will allocate 
an auto-grown ID which might be
+> inconsistent if you register classes with different order between Fury 
instance.
+
+```java
+public class StructMappingExample {
+  static class Struct1 {
+    int f1;
+    String f2;
+
+    public Struct1(int f1, String f2) {
+      this.f1 = f1;
+      this.f2 = f2;
+    }
+  }
+
+  static class Struct2 {
+    int f1;
+    String f2;
+    double f3;
+  }
+
+  static ThreadSafeFury fury1 = Fury.builder()
+    .withCompatibleMode(CompatibleMode.COMPATIBLE).buildThreadSafeFury();
+  static ThreadSafeFury fury2 = Fury.builder()
+    .withCompatibleMode(CompatibleMode.COMPATIBLE).buildThreadSafeFury();
+
+  static {
+    fury1.register(Struct1.class);
+    fury2.register(Struct2.class);
+  }
+
+  public static void main(String[] args) {
+    Struct1 struct1 = new Struct1(10, "abc");
+    Struct2 struct2 = (Struct2) fury2.deserialize(fury1.serialize(struct1));
+    Assert.assertEquals(struct2.f1, struct1.f1);
+    Assert.assertEquals(struct2.f2, struct1.f2);
+    struct1 = (Struct1) fury1.deserialize(fury2.serialize(struct2));
+    Assert.assertEquals(struct1.f1, struct2.f1);
+    Assert.assertEquals(struct1.f2, struct2.f2);
+  }
+}
+```
+
 ## Migration
 
 ### JDK migration


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

Reply via email to