當兩個進程在進行遠程通訊時,彼此可以發送各種類型的資料。無論是何種類型的資料,都會以二進位序列的形式在網路上傳送。發送方需要把這個Java對象轉換為位元組序列,才能在網路上傳送;接收方則需要把位元組序列再恢複為Java對象。
把Java對象轉換為位元組序列的過程稱為對象的序列化。
把位元組序列恢複為Java對象的過程稱為對象的還原序列化。
對象的序列化主要有兩種用途:
1) 把對象的位元組序列永久地儲存到硬碟上,通常存放在一個檔案中;
2) 在網路上傳送對象的位元組序列。
java.io.ObjectOutputStream代表對象輸出資料流,它的writeObject(Object obj)方法可對參數指定的obj對象進行序列化,把得到的位元組序列寫到一個目標輸出資料流中。
java.io.ObjectInputStream代表對象輸入資料流,它的readObject()方法從一個源輸入資料流中讀取位元組序列,再把它們還原序列化為一個對象,並將其返回。、
只有實現了Serializable和Externalizable介面的類的對象才能被序列化。Externalizable介面繼承自Serializable介面,實現Externalizable介面的類完全由自身來控制序列化的行為,而僅實現Serializable介面的類可以採用預設的序列化方式。
對象序列化包括如下步驟:
1) 建立一個對象輸出資料流,它可以封裝一個其他類型的目標輸出資料流,如檔案輸出資料流;
2) 通過對象輸出資料流的writeObject()方法寫對象。
對象還原序列化的步驟如下:
1) 建立一個對象輸入資料流,它可以封裝一個其他類型的源輸入資料流,如檔案輸入資料流;
2) 通過對象輸入資料流的readObject()方法讀取對象。
For Example:
import java.io.*;
public class ObjectDemo
{
public static void main(String[] args)
{
try
{
ObjectOutputStream objectOut=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("object.bin")));
Customer cus=new Customer("wang","0001","pddd",3000);
objectOut.writeObject(cus);
objectOut.close();
ObjectInputStream objectIn=new ObjectInputStream(new BufferedInputStream(new FileInputStream("object.bin")));
cus=(Customer)objectIn.readObject();
System.out.println("Name:"+cus.getName());
System.out.println("ID:"+cus.getID());
System.out.println("Password:"+cus.getPassword());
System.out.println("Salary:"+cus.getSalary());
}
catch (NotSerializableException e)
{
System.out.println(e.getMessage());
}
catch(ClassNotFoundException e)
{
System.out.println(e.getMessage());
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
class Customer implements Serializable
{
private String name,ID;
transient private String password;
private float salary;
public Customer(String name,String ID,String password,float salary)
{
this.name=name;
this.ID=ID;
this.password=password;
this.salary=salary;
}
public String getName()
{
return name;
}
public String getID()
{
return ID;
}
public String getPassword()
{
return password;
}
public float getSalary()
{
return salary;
}
};