对象的序列化指的是将对象以字节流的形式纪念性传输,即将对象转化(分解)为顺序字节流后应用java.io包中操作字节流的类实现在各种介质中的数据传输,对象的序列化被广泛地应用与网络分布式的远程调用RMI系统中。
当一个类实现了java.io包中的Serializable接口,则通过该类创建的对象被称之为可序列化对象。
一个对象可序列化的要求是创建该对象的类要实现Serializable接口。
示例
import java.io.*;
import java.util.*;
//关于Serializable接口见:http://java.sun.com/javase/6/docs/api/java/io/Serializable.html
public class SerializeDemo implements Serializable {
Date date=new Date();
String strUser;
//transient String strPass;//非序序列化的部分
String strPass;//可以设定为序列化的部分
public SerializeDemo(String name,String pwd){
strUser=name;
strPass=pwd;
}
public String toString(){ //重写了根类Object的方法toString()
String pwd=(strPass==null) ? “未知”:strPass;
return “登录信息:n”+”用户名:”+ strUser+”n日期:”+date.toLocaleString()+”n密码:”+pwd;
}
public static void main(String[] args)
throws IOException,ClassNotFoundException{
SerializeDemo sd=new SerializeDemo(“liuzc”,”liuzc518″);//新建对象,调用构造函数
System.out.println(sd);
//下面是新建一个对象输出流
ObjectOutputStream oosLogin=new ObjectOutputStream(new FileOutputStream(“user.data”));
oosLogin.writeObject(sd);
oosLogin.close();
long lngTime=System.currentTimeMillis()+2000;
while(System.currentTimeMillis()<lngTime);
ObjectInputStream oisLogin=new ObjectInputStream(new FileInputStream(“user.data”));
System.out.println(“重新读入登录信息……n”+(new Date()).toLocaleString());
sd=(SerializeDemo)oisLogin.readObject();
System.out.println(sd);
}
}