Posted on 2010-01-29 10:46
强稻 阅读(227)
评论(0) 编辑 收藏
在程序运行过程中对象是被保存在内存中的,也就是只在程序运行过程中有效,一旦程序结束或者中止所有这个程序中的对象就都消失了。
如果需要把对象状态保存起来,当然,有数据库,但是初学阶段,还没学到JDBC章节,而且有时用文件记录会更合适,现在正研究的就是文件处理,所以,现在就是要把对象状态以文件的形式保存在磁盘中,以供将来调用。这个过程书上叫“对象串行化”(那个字读xing还是hang我还不知道呢)。
JAVA中要实现串行化,就是让需要串行化的类实现java.io.Serializable接口。Serializable接口没有任何方法和属性的声明,空接口。书上说实现这个接口实际是做一种声明,表明该类遵循了串行化的潜规则(没太懂这句话)。
java.io包里专门为保存对象提供了对象操作流:ObjectInputStream和ObjectOutputStream。
java.io.ObectInputStream继承自java.io.InputStream,同时又实现了接口ObjectInput和ObjectStreamConstants。ObjectOutputStream与之类似。
构造函数如下:
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
ObjectInputStream实现从输入流中读取一个对象用readObject()方法,ObjectOutputStream与之对应的是writeObject()方法。
举例:
package myjavatests;
import java.io.*;
class MM implements Serializable {
int height;
double weight;
String name;
String sw;
public MM(int height, double weight, String name,String sw) {
this.height = height;
this.weight = weight;
this.name = name;
this.sw = sw;
}
}
public class SerializableTest {
public static void main(String[] args) {
MM m = new MM(176,46,"Lily","80-30-60");
System.out.println("将要保存的对象的状态:");
System.out.println("身高:"+m.height);
System.out.println("体重:"+m.weight);
System.out.println("姓名:"+m.name);
System.out.println("三围:"+m.sw);
try {
FileOutputStream fos = new FileOutputStream("e:\\javafiletest\\mm.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(m);
oos.close();
} catch(IOException ioe) {
System.out.println(ioe);
}
//读取对象
m = null;
try {
FileInputStream fis = new FileInputStream("e:\\javafiletest\\mm.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
m = (MM)(ois.readObject());
ois.close();
System.out.println("恢复对象的状态:");
System.out.println("身高:"+m.height);
System.out.println("体重:"+m.weight);
System.out.println("姓名:"+m.name);
System.out.println("三围:"+m.sw);
} catch(IOException ioe) {
System.out.println(ioe);
} catch(ClassNotFoundException c) {
System.out.println(c);
}
}
}
在NetBeans中按Shift+F6运行这个文件,得到结果:
将要保存的对象的状态:
身高:176
体重:46.0
姓名:Lily
三围:80-30-60
恢复对象的状态:
身高:176
体重:46.0
姓名:Lily
三围:80-30-60
同时,在程序指定的磁盘目录下会产生指定名称的文件,这里是e:\javafiletest\mm.dat,试着用记事本打开,看到如下内容:
sr myjavatests.MM糱?鯠? I heightD weightL namet Ljava/lang/String;L swq ~ xp 癅G t Lilyt 80-30-60
本次记录到此结束。