Java SE 第8章流和檔案--物件流
Java SE 第8章流和檔案–物件流
一、ObjectOutputStream類實現物件的序列化,即把物件寫入位元組流。該類是OutputStream的子類。該類也實現了ObjectOutput介面(支援物件序列化)。
該類的一個構造方法如下:
ObjectOutputStream(OutputStream OutStream)throws IOException
其中,引數OutStream是將被寫入物件序列化的輸出流。
該類常用的方法及功能:
final void writeObject(Object object) 寫入一個obj到呼叫的流中
void writeBytes(String str) 寫入代表str的位元組到呼叫的流中
void writeChar(int c) 寫入一個char到呼叫的流中
二、ObjectInputStream類實現物件的反序列化,即把物件從一個位元組流中讀取出來。該類是InputStream的子類。該類也實現了ObjectInput介面(支援物件序列化)。該類的一個構造方法如下:
ObjectInputStream(InputStream InputStream)throws IOException
其中,引數InputStream是將被寫入物件序列化的輸入流。
該類常用的方法及功能:
final Object readObject 從流中讀取物件
int readInt() 從流中讀取一個32位的int值
String readUTF() 從流中讀取UTF-8格式的字串
Char readChar() 讀取一個16位的char值
這是一個Person物件
public class Person implements Serializable{
private String idCard;
private String name;
private int age;
public Person(String idCard,String name,int age){
this.idCard=idCard;
this.name=name;
this.age=age;
}
//get和set方法省略
}
注意:此Person物件實現了介面Serializable ,此介面中沒有定義任何方法,它只是簡單地指示一個類可以被序列化。如果一個類是可序列化的,則它的所有子類也是可序列化的。
Serializable介面定義如下:
public interface Serializable{
}
示例:利用ObjectOutputStream把上述Person型別的物件寫入到檔案(d:\Person.tmp)中。
1)建立一個ObjectOutputStream的物件
2)建立一個Person的物件
3)把物件寫入到檔案中
4)最後關閉流
package ch08;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamDemo {
public static void main(String[] args) {
ObjectOutputStream obs=null;
try{
obs=new ObjectOutputStream(new FileOutputStream("d:\\Person.tmp"));(1)
Person person=new Person("121001","張三",25);(2)
obs.writeObject(person);(3)
obs.flush();
}catch(Exception ex){
ex.printStackTrace();
}finally{
try{
if(obs!=null){
obs.close();(4)
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
示例:利用ObjectInputStream從檔案(d:\Person.tmp)中讀取一個Person型別的物件。
1)建立一個ObjectInputStream物件
2)接收物件
3)列印
4)關閉流
package ch08;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
ObjectInputStream ois=null;
try{
ois = new ObjectInputStream(new FileInputStream("d:\\Person.tmp"));(1)
Object obj=ois.readObject();(2)
if(obj!=null){
Person person=(Person)obj;
System.out.println("編號:"+person.getIdCard()(3)
+"姓名:"+person.getName()
+"年齡:"+person.getAge());
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
try{
if(ois!=null){
ois.close();(4)
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
效果圖: