java.io.Serializable的本质就是将内存的对象,以文本的形式保存到磁盘上,使用的时候再读出来,以减少应用程序的压力.有点类似与虚拟内存.在openJPA里,entity的时候,一般需要使用.
序列化的时候有以下几点需要注意.
1)先序列化,先读取(FIFO);
2)反序列化的时候,返回的都是Object,要自动转换类型;
3)用关键字transient标记的属性,将不被序列化;
4)对象要继承类java.io.Serializable;
5)序列化用ObjectOutputStream,反序列化用ObjectInputStream;
下面是2个示例代码,一看就能明白,本人不做过多的解释^_^
package test;
import java.io.Serializable;
public class User implements Serializable {
private String name;
private transient int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "name=" + name + "\n" + "age=" + age;
}
}
package test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
public class TestSerializable {
public static void main(String[] args) {
String path = "c:\\myfile";
serialize(path);
System.out.println("Object is serializing!");
deSerialize(path);
}
public static void serialize(String fileName) {
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));
out.writeObject("phl");// 序列化字符串对象
out.writeObject(new Date());// 序列化日期对象
User user = new User("phl", 26);
out.writeObject(user);// 序列化自定义对象
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void deSerialize(String fileName) {
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
String name = (String) in.readObject();
Date date = (Date) in.readObject();
User user = (User) in.readObject();
System.out.println(name);
System.out.println(date);
System.out.println(user.toString());
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
运行结果:
Object is serializing!
phl
Fri Sep 03 19:44:47 CST 2010
name=phl
age=0