<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 使用內存序列化的 Java 深層復制 > 原文: [https://howtodoinjava.com/java/serialization/how-to-do-deep-cloning-using-in-memory-serialization-in-java/](https://howtodoinjava.com/java/serialization/how-to-do-deep-cloning-using-in-memory-serialization-in-java/) 眾所周知,深度克隆(*和某些性能開銷*)或深層復制的最簡單方法是[序列化](https://howtodoinjava.com/java/serialization/a-mini-guide-for-implementing-serializable-interface-in-java/)。 Java 序列化涉及將對象序列化為字節,然后再次從字節序列化為對象。 我建議您在僅僅需要它且不需要持久保存對象以備將來使用的情況下,使用內存深度克隆。 在這個 Java 深度克隆示例中,我將提出一種內存中深度克隆的機制供您參考。 請記住,對于[**單例模式**](//howtodoinjava.com/design-patterns/singleton-design-pattern-in-java/ "Singleton design pattern in java")來說,深克隆是邪惡的。 它使擁有多個單例類實例成為可能。 > 閱讀更多: [Java 對象克隆指南](//howtodoinjava.com/java/cloning/a-guide-to-object-cloning-in-java/ "A guide to object cloning in java") ## 1\. Java 深層復制示例 在演示程序中,我創建了一個名為`SerializableClass`的演示類。 這具有三個變量,即`firstName`,`lastName`和`permissions`。 我將向此類添加`deepCopy()`實例級方法。 每當在`SerializableClass`實例上調用時,它將返回該實例的精確克隆/深層副本。 對于深度克隆,我們必須先進行序列化,然后進行反序列化。 對于序列化,我使用了 [`ByteArrayOutputStream`](https://docs.oracle.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html "ByteArrayOutputStream") 和`ObjectOutputStream`。 對于反序列化,我使用了`ByteArrayInputStream`和`ObjectInputStream`。 ```java package serializationTest; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class SerializableClass implements Serializable { private static final long serialVersionUID = 1L; private String firstName = null; private String lastName = null; @SuppressWarnings("serial") private List permissions = new ArrayList() { { add("ADMIN"); add("USER"); } }; public SerializableClass(final String fName, final String lName) { //validateNameParts(fName); //validateNameParts(lName); this.firstName = fName; this.lastName = lName; } public SerializableClass deepCopy() throws Exception { //Serialization of object ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject(this); //De-serialization of object ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream in = new ObjectInputStream(bis); SerializableClass copied = (SerializableClass) in.readObject(); //Verify that object is not corrupt //validateNameParts(fName); //validateNameParts(lName); return copied; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Override public String toString() { return new StringBuilder().append(getFirstName()+",") .append(getLastName()+",") .append(permissions) .toString(); } } ``` ## 2\. 演示 讓我們測試該類并創建實例的深層副本,以驗證其是否按預期工作。 ```java package serializationTest; public class ImMemoryTest { public static void main(String[] args) throws Exception { //Create instance of serializable object SerializableClass myClass = new SerializableClass("Lokesh","Gupta"); //Verify the content System.out.println(myClass); //Now create a deep copy of it SerializableClass deepCopiedInstance = myClass.deepCopy(); //Again verify the content System.out.println(deepCopiedInstance); } } ``` 程序輸出。 ```java Lokesh,Gupta,[ADMIN, USER] Lokesh,Gupta,[ADMIN, USER] ``` 在考慮應用程序中的**內存深層復制對象**之前,您可能需要閱讀有關[**序列化指南**](//howtodoinjava.com/java/serialization/a-mini-guide-for-implementing-serializable-interface-in-java/ "A mini guide for implementing serializable interface in java")的信息,這將防止將來的設計中斷。 學習愉快! 閱讀更多: [Java 中的淺表副本與深表副本](https://howtodoinjava.com/java/cloning/a-guide-to-object-cloning-in-java/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看