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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # **1. 序列化與反序列化** ## **1.1 序列化** 1. Java序列化能夠將實例對象寫入字節流中(**只序列化對象屬性值,而不序列化方法**) 2. 序列化后的對象(字節信息)可用于網絡傳輸、持久化到數據庫、磁盤中 ## **1.2 反序列化** 需要對象的時候,再從序列化出來的字節信息中構造出原來的對象 # **2. 實現序列化** `Java`中要使一個類可以序列化,實現`java.io.Serializable` 接口 1. user對象 ~~~ @Data public class User implements Serializable { private static final long serialVersionUID = 1L; private String name; private String age; } ~~~ 2. 測試 ~~~ public class serializeTest { public static void main(String[] args) throws Exception { User user = new User(); user.setName("fufu"); user.setAge("18"); serialize(user); System.out.println("Java序列化前的結果:{} " + user.toString()); User duser = deserialize(); System.out.println("Java反序列化的結果:{} " + duser.toString()); } private static void serialize(User user) throws Exception { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("C:\\Users\\93130\\Desktop\\user.txt"))); oos.writeObject(user); oos.close(); } private static User deserialize() throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("C:\\Users\\93130\\Desktop\\user.txt"))); return (User) ois.readObject(); } } ~~~ 輸出 ``` Java序列化前的結果:{} User(name=fufu, age=18) Java反序列化的結果:{} User(name=fufu, age=18) ``` 產生文件 ![](https://img.kancloud.cn/c7/4f/c74f3d139ed479c555232bd70bd05be9_713x257.png) # 3. **`serialVersionUID`** 屬性 1. 因為序列化對象時,如果不顯示的設置`serialVersionUID`,Java在序列化時會根據對象屬性自動的生成一個`serialVersionUID`,再進行存儲或用作網絡傳輸。 2. 在反序列化時,會根據對象屬性自動再生成一個新的`serialVersionUID`,和序列化時生成的`serialVersionUID`進行比對,兩個`serialVersionUID`相同則反序列化成功,否則就會拋異常。 3. 而當顯示的設置`serialVersionUID`后,Java在序列化和反序列化對象時,生成的`serialVersionUID`都為我們設定的`serialVersionUID`,這樣就保證了反序列化的成功。 例如將對象user序列化后,對user對象源碼進行了修改,此時再去反序列化會報錯,因為serialVersionUID不一樣了;如果顯示指定則可以避免處理類情況 # 4. **transient** 序列化對象時如果希望哪個屬性不被序列化,則用`transient`關鍵字修飾即可 ~~~ @Data public class User implements Serializable { private transient String name; private String age; } ~~~ 可以看到字段`name`的值沒有被保存到磁盤中,一旦變量被`transient`修飾,變量將不再是對象持久化的一部分,該變量內容在序列化后無法獲得訪問。 復制 ~~~ Java序列化前的結果: User(name=fufu, age=18) Java反序列化的結果:User(name=null, age=18) ~~~ 一個靜態變量不管是否被`transient`修飾,均不能被序列化。 因為`static`修飾的屬性是屬于類,而非對象。
                  <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>

                              哎呀哎呀视频在线观看