1. 程式人生 > 其它 >Java SE 第8章流和檔案--物件流

Java SE 第8章流和檔案--物件流

技術標籤:JavaSejava

Java SE 第8章流和檔案–物件流

一、ObjectOutputStream類實現物件的序列化,即把物件寫入位元組流。該類是OutputStream的子類。該類也實現了ObjectOutput介面(支援物件序列化)。

               該類的一個構造方法如下:

ObjectOutputStream(OutputStream OutStream)throws IOException
其中,引數OutStream是將被寫入物件序列化的輸出流。

                 該類常用的方法及功能:

final void writeObject(Object object) 寫入一個obj到呼叫的流中

void writeInt(int i) 寫入一個int到呼叫的流中
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();2if(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();
			}
		}
	}
}

效果圖:
在這裡插入圖片描述