序列化(寫對象)與反序列化(讀對象)
阿新 • • 發佈:2019-04-06
獲得 close input main lee 應該 strong day ron
序列化(寫對象)與反序列化(讀對象)
1、java.io.ObjectOutputStream extends OutputStream
對象的序列化流,把對象以流的方式寫入文件
構造方法
構造方法 | 作用 |
---|---|
ObjectOutStream(OutputStream out) | 創建使用指定OutputStream的 ObjectOutputStream對象 |
參數:
OutputStream out :字節輸出流
特有的一個成員方法
方法 | 作用 |
---|---|
void writeObject(Object obj) | 將指定的對象寫入到ObjectOutputStream |
使用步驟
- 創建ObjectOutputStream對象,構造方法中傳遞字節輸出流對象
- 使用ObjectOutputStream對象的writeObject方法,將指定對象寫入ObjectOutStream
- close方法釋放資源
package cn.zhuobo.day15.aboutObjectOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class Demo01ObjectOutputStream { public static void main(String[] args) throws IOException { Person p1 = new Person("豬八戒", 360); writeObject(p1); } private static void writeObject(Person p) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day15-code/writeObject.txt")); oos.writeObject(p); oos.close(); } }
但是要註意的是:要要序列化或者反序列化的對象應該是實現了一個java.io.Serializable接口的
Serializable接口:是一個標記類,實現該接口的類會獲得一個標記,用來標記對象可以序列化或者反序列化。這個接口內部其實什麽也沒有,就僅僅是標記作用的標記類。沒有實現該接口的類的對象要序列化就會拋出 NotSerializableException。
public class Person implements Serializable {
// body
}
2、java.io.ObjectInputStream extends InputStream
對象的反序列化流,把文件保存的對象以流的方式讀取出來
構造方法
構造方法 | 作用 |
---|---|
ObjectInputStream(InputStream in) | 創建一個從指定的 InputStream對象中讀取的ObjectInputStream |
參數:
InputStream in : 字節輸入流
特有的成員方法
方法 | 作用 |
---|---|
Object readObject() | 從ObjectInputStream中讀取對象 |
使用步驟
- 創建一個ObjectInputStream對象,參數傳遞字節輸入流對象
- 使用ObjectInputStream對象的readObject方法,讀取保存對象的文件
- 使用close方法釋放資源
- 使用讀取的對象
package cn.zhuobo.day15.aboutObjectInputStream;
import cn.zhuobo.day15.aboutObjectOutputStream.Person;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Demo01ObjectInputStream {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day15-code/writeObject.txt"));
Object o = ois.readObject();
ois.close();
// System.out.println(o.toString());
Person p = (Person)o;
System.out.println(p);
}
}
要註意的是
反序列化的前期:類必須實現了Serializable接口,其次是存在類對應的class文件
readObject方法已經聲明了拋出ClassNotFoundException,因此這個異常也要處理,或者繼續聲明throws或者try catch
序列化(寫對象)與反序列化(讀對象)