<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 序列化示例 > 原文: [https://javatutorial.net/java-serialization-example](https://javatutorial.net/java-serialization-example) 序列化的對象。 這意味著什么? Java 提供了一種功能,該功能將[對象](https://javatutorial.net/java-objects-and-classes-tutorial)表示為字節序列,其中包括對象的數據以及有關對象類型和該對象中存儲的數據類型的信息。 ![java-featured-image](https://img.kancloud.cn/05/3e/053ee0bb59842d92359246c98f815e0c_780x330.jpg) 將序列化的對象寫入文件后,可以稍后對其進行反序列化,這反過來意味著–表示對象及其數據的類型信息和字節可用于在內存中重新創建對象。 ![Serialization illustration java example](https://img.kancloud.cn/41/cd/41cd7c02091db6e8f0acee38fd5a2f32_679x163.jpg) 創建的字節流與平臺無關。 這意味著,如果對象在一個平臺上序列化,則可以在另一個平臺上反序列化。 `ObjectInputStream`和`ObjectOutputStrem`是高級流,其中包含用于序列化和反序列化對象的方法。 `ObjectInputStream`提供了一個稱為`readObject()`的方法,該方法可檢索對象并將其反序列化。 它返回一個`Object`值,這意味著它將需要強制轉換為適當的數據類型。 它拋出`IOException`。 ```java public final Object readObject() ``` `ObjectOutputStream`提供了許多寫入方法,但使用最廣泛的是 ```java public final void writeObject(Object object) ``` `writeObject()`方法序列化對象并將其發送到輸出流。 如果序列化出錯,則可能會引發`IOException`。 因此,為了可視化這些方法的確切位置,讓我們在上面的圖片中顯示它們。 ![write_readObject java example](https://img.kancloud.cn/6f/73/6f736a2c13690977b2196af858a3bae9_1031x231.jpg) ## Java 序列化示例 `DemoObject.java` ```java import java.io.*; public class DemoObject implements java.io.Serializable { private String name; private int age; public DemoObject (String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } } ``` `Main.java` ```java import java.io.*; public class Main { public static void main(String[] args) { DemoObject objectExample = new DemoObject("John", 19); String filename = "file.ser"; DemoObject obj = null; // serialization try { FileOutputStream file = new FileOutputStream(filename); ObjectOutputStream output = new ObjectOutputStream(file); output.writeObject(objectExample); output.close(); file.close(); System.out.println("Serialization of object has been completed"); } catch(IOException err) { System.out.println("IOException occurred"); } // Deserialization try { FileInputStream file = new FileInputStream(filename); ObjectInputStream input = new ObjectInputStream(file); obj = (DemoObject) input.readObject(); // cast to the appropriate type input.close(); file.close(); System.out.println("Deserialization of object has been completed"); System.out.println(); System.out.println("Values of deserialized object are:"); System.out.println("=================================="); System.out.println("Name = " + obj.getName()); System.out.println("Age = " + obj.getAge()); System.out.println("=================================="); } catch(IOException err) { System.out.println("IOException is caught"); } catch(ClassNotFoundException err) { System.out.println("ClassNotFoundException is caught"); } } } ``` **輸出**: ```java Serialization of object has been completed Deserialization of object has been completed Values of deserialized object are: ================================== Name = John Age = 19 ================================== ``` **以上**的代碼實現的細分 我們有一個`DemoObject`類,它是一個虛擬類,將對其進行序列化然后反序列化。 它有 2 個實例變量,我們稱為名稱和年齡。 我們可以將這些變量設置為公開,但是我們希望始終保持安全,因此在上面的示例中將它們聲明為私有。 `Main.java`強制轉換`writeObject`和`readObject`并基本上將錯誤處理并打印到控制臺。 在示例中,我們有一個設置為`null`的對象。 設置為`null`是因為它充當反序列化對象的“占位符”。 基本上,我們可以將反序列化的對象復制到該空對象中。 ![null object purpose java example serialized deserialized](https://img.kancloud.cn/c6/29/c6297e1cd7b57b0922632c0c8163c88d_848x160.jpg) **注意**:如果您的編輯器顯示此警告: ![warning java](https://img.kancloud.cn/b8/88/b8888565cfd05dcb5598e98e794c5cd8_1139x34.jpg) 您可以忽略它或將您的 IDE 配置為自動生成 ID。 我總是建議讓您的 IDE 為您創建唯一的標識符。 ## 什么時候需要序列化 序列化是一種通用且有效的協議,可在組件之間傳輸對象。 序列化用于遵循此協議傳輸對象。 最后一點:請記住,使用一個 Java 版本進行序列化的對象可能無法在另一 Java 版本上運行。 例如:用 Java 6 序列化對象不是一個好主意,用 Java 8 反序列化它們,反之亦然。
                  <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>

                              哎呀哎呀视频在线观看