一 准备实体类
import java.io.*;
public class Person implements Externalizable // 此类的对象可以被序列化
{
private String name;
private int age;
private String country;
public Person() // 必须定义无参构造
{
}
public Person(String name, int age, String country) // 通过构造方法设置属性内容
{
this.name = name;
this.age = age;
this.country = country;
}
// 覆写toString()方法
public String toString()
{
return "姓名:" + this.name + " 年龄:" + this.age + " 国家 :" + this.country;
}
// 覆写此方法,根据需要,读取内容,反序列化时使用
public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException
{
this.name = (String)in.readObject() ; // 读取姓名属性
this.age = in.readInt() ; // 读取年龄
}
// 覆写此方法,根据需要,可以保存属性或具体内容,序列化时使用
public void writeExternal(ObjectOutput out) throws IOException
{
out.writeObject(this.name) ; // 保存姓名属性
out.writeInt(this.age) ; // 保存年龄属性
}
}
二 准备序列化和反序列化类
import java.io.*;
public class SerDemo03
{
public static void main(String[] args) throws Exception
{
ser(); // 序列化
dser(); // 反序列化
}
public static void ser() throws Exception // 序列化操作
{
File f = new File("SerTest.txt");
ObjectOutputStream oos = null;
OutputStream out = new FileOutputStream(f); // 文件输出流
oos = new ObjectOutputStream(out); // 为对象输出流实例化
oos.writeObject(new Person("Tom", 20, "American")); // 保存对象到文件
oos.close(); // 关闭输出
}
public static void dser() throws Exception // 反序列化操作
{
File f = new File("SerTest.txt");
ObjectInputStream ois = null;
InputStream input = new FileInputStream(f); // 文件输出流
ois = new ObjectInputStream(input); // 为对象输出流实例化
Object obj = ois.readObject(); // 读取对象
ois.close(); // 关闭输出
System.out.println(obj);
}
}
三 运行
E:\Java\Java编程技术大全\范例源码、实战练习答案、赠送资源\范例源码\chap17\范例17-4>javac Person.java
E:\Java\Java编程技术大全\范例源码、实战练习答案、赠送资源\范例源码\chap17\范例17-4>javac SerDemo03.java
E:\Java\Java编程技术大全\范例源码、实战练习答案、赠送资源\范例源码\chap17\范例17-4>java SerDemo03
姓名:Tom 年龄:20 国家 :null