<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之旅 廣告
                [TOC] # 簡介 用于從流中讀取對象的 操作流 ObjectInputStream 稱為 反序列化流 用于向流中寫入對象的操作流 ObjectOutputStream 稱為 序列化流 * 特點:用于操作對象。可以將對象寫入到文件中,也可以從文件中讀取對象 **序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化,將數據分解成字節流,以便存儲在文件中或在網絡上傳輸。** ## 對象序列化流ObjectOutputStream ObjectOutputStream 將 Java 對象的基本數據類型和圖形寫入 OutputStream。可以使用 ObjectInputStream 讀取(重構)對象。通過在流中使用文件可以實現對象的持久存儲。 注意:只能將支持 java.io.Serializable 接口的對象寫入流中 **構造方法** ~~~ ObjectOutputStream(OutputStream out) 創建寫入指定OutputStream的ObjectOutputStream ~~~ **方法** ~~~ void writeObject(Object obj) 將指定的對象寫入ObjectOutputStream ~~~ ~~~ public static void main(String[] args) throws IOException, ClassNotFoundException { /* * 將一個對象存儲到持久化(硬盤)的設備上。 */ writeObj();//對象的序列化。 } public static void writeObj() throws IOException { //1,明確存儲對象的文件。 FileOutputStream fos = new FileOutputStream("tempfile\\obj.object"); //2,給操作文件對象加入寫入對象功能。 ObjectOutputStream oos = new ObjectOutputStream(fos); //3,調用了寫入對象的方法。 oos.writeObject(new Person("wangcai",20)); //關閉資源。 oos.close(); } ~~~ Person類 ~~~ public class Person implements Serializable { private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } ~~~ ## 對象反序列化流ObjectInputStream ObjectInputStream 對以前使用 ObjectOutputStream 寫入的基本數據和對象進行反序列化。支持 java.io.Serializable接口的對象才能從流讀取 **構造方法** ~~~ ObjectInputStream(InputStream in) 創建從指定InputStream讀取的ObjectInputStream ~~~ **方法** ~~~ Object readObject() 從ObjectInputStream讀取對象 ~~~ ~~~ public static void main(String[] args) throws IOException, ClassNotFoundException { readObj();//對象的反序列化。 } public static void readObj() throws IOException, ClassNotFoundException { //1,定義流對象關聯存儲了對象文件。 FileInputStream fis = new FileInputStream("tempfile\\obj.object"); //2,建立用于讀取對象的功能對象。 ObjectInputStream ois = new ObjectInputStream(fis); Person obj = (Person)ois.readObject(); System.out.println(obj.toString()); } ~~~ ## 序列化接口 當一個對象要能被序列化,這個對象所屬的類必須實現Serializable接口。否則會發生異常NotSerializableException異常。 同時當反序列化對象時,如果對象所屬的class文件在序列化之后進行的修改,那么進行反序列化也會發生異常InvalidClassException。發生這個異常的原因如下: * 該類的序列版本號與從流中讀取的類描述符的版本號不匹配 * 該類包含未知數據類型 * 該類沒有可訪問的無參數構造方法 Serializable標記接口。該接口給需要序列化的類,提供了一個序列版本號。serialVersionUID. 該版本號的目的在于驗證序列化的對象和對應類是否版本匹配。 ~~~ //給類顯示聲明一個序列版本號。 private static final long serialVersionUID = 1L; ~~~ ## 瞬態關鍵字transient 當一個類的對象需要被序列化時,某些屬性不需要被序列化,這時不需要序列化的屬性可以使用關鍵字transient修飾。只要被transient修飾了,序列化時這個屬性就不會被序列化了。 同時靜態修飾也不會被序列化,因為序列化是把對象數據進行持久化存儲,而靜態的屬于類加載時的數據,不會被序列化。 ~~~ private transient/*瞬態*/ int age; ~~~ # 例子 Info類 ~~~ package com.study; import scala.runtime.Int; import java.io.Serializable; class Info implements Serializable { private static final long serialVersionUID = 1L; private String name; private int price; public Info(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public void show() { System.out.println("---show方法---"); System.out.println("price---" + this.price); } @Override public String toString() { final StringBuilder sb = new StringBuilder("{"); sb.append("\"name\":\"") .append(name).append('\"'); sb.append(",\"price\":") .append(price); sb.append('}'); return sb.toString(); } } ~~~ HelloWorld類 ~~~ package com.study; import java.io.*; public class HelloWorld { public static void main(String[] args) throws IOException, ClassNotFoundException { //ser(); dser(); } public static void ser() throws IOException { ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(new File("/Users/jdxia/Desktop/study/jdxia/src/main/java/hello.txt")) ); //序列化對象 oos.writeObject(new Info("java", 70)); oos.close(); } public static void dser() throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream( new FileInputStream(new File("/Users/jdxia/Desktop/study/jdxia/src/main/java/hello.txt")) ); //按照obj讀取 Object obj = ois.readObject(); Info info = (Info) obj; System.out.println(info); info.show(); ois.close(); } } ~~~
                  <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>

                              哎呀哎呀视频在线观看