posts - 1, comments - 0, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2010年1月29日

在程序运行过程中对象是被保存在内存中的,也就是只在程序运行过程中有效,一旦程序结束或者中止所有这个程序中的对象就都消失了。
如果需要把对象状态保存起来,当然,有数据库,但是初学阶段,还没学到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
本次记录到此结束。

posted @ 2010-01-29 10:46 强稻 阅读(227) | 评论 (0)编辑 收藏