JavaIO流之物件流
阿新 • • 發佈:2021-06-29
IO流中的物件流
- ObjectInputStream 和 ObjectOutputStream
- 作用:用於儲存和讀取基本資料型別資料或物件的處理流。它的強大之處就是可以把Java中的物件寫入到資料來源中,也能把物件從資料來源中還原回來。
- 要想一個java物件是可序列化的,需要滿足相應的要求。
XX類需要滿足如下的要求,方可序列化
- 需要實現介面:Serializable (是一個標識介面,其中沒有抽象方法)
- 當前類提供一個全域性常量:serialVersionUID
- 除了當前Person類需要實現Serializable介面之外,還必須保證其內部所有屬性也必須是可序列化的。(預設情況下,基本資料型別可序列化)
- 補充:ObjectOutputStream和ObjectInputStream不能序列化static和transient修飾的成員變數
- 序列化機制:
- 物件序列化機制允許把記憶體中的Java物件轉換成平臺無關的二進位制流,從而允許把這種
- 二進位制流持久地儲存在磁碟上,或通過網路將這種二進位制流傳輸到另一個網路節點。
- 當其它程式獲取了這種二進位制流,就可以恢復成原來的Java物件
序列化過程
將記憶體中的java物件儲存到磁碟中或通過網路傳輸出去。
使用ObjectOutputStream實現
測試程式碼:
@Test public void testObjectOS(){ ObjectOutputStream oos = null; try { //1.造流 oos = new ObjectOutputStream(new FileOutputStream("object.dat")); //2.將物件寫入檔案 oos.writeObject(new String("唯獨你沒懂")); oos.flush(); oos.writeObject(new Person("zyj",23)); oos.flush(); } catch (IOException e) { e.printStackTrace(); } finally { //3. if (oos != null) { try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
反序列化
將磁碟檔案中的物件還原為記憶體中的一個java物件。
使用ObjectInputStream來實現
測試程式碼:
@Test public void testObjectIS(){ ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream("object.dat")); Object o = ois.readObject(); String str = (String) o; Person p = (Person) ois.readObject(); System.out.println(str); System.out.println(p); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if (ois != null) { try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } } }
上述測試中所使用到的Person類:
public class Person implements Serializable {
public static final long serialVersionUID = 4148615616546546512L;
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
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 +
'}';
}
}