当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为java对象。
把java对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为java对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
1)
把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2)
在网络上传送对象的字节序列。
java.io.objectoutputstream代表对象输出流,它的writeobject(object
obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.io.objectinputstream代表对象输入流,它的readobject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。、
只有实现了serializable和externalizable接口的类的对象才能被序列化。externalizable接口继承自serializable接口,实现externalizable接口的类完全由自身来控制序列化的行为,而仅实现serializable接口的类可以采用默认的序列化方式
。
对象序列化包括如下步骤:
创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
通过对象输出流的writeobject()方法写对象。
对象反序列化的步骤如下:
创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
通过对象输入流的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
}
}
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;
getid()
id;
getpassword()
public float
getsalary()
salary;
};