现在的位置: 首页 > 综合 > 正文

序列化 java.io.Serializable

2012年08月20日 ⁄ 综合 ⁄ 共 2418字 ⁄ 字号 评论关闭

通过 一个简单的例子来认识 Serializable

package tt;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class ObjectYouWannaSave implements Serializable
{   
    
private static final long serialVersionUID = 3224332633725166982L;
    
//所有实现Serializable接口的类都需要增加 serialVersionUID
    int   x;
    
int   y;     
    SubObject   so   
=   new   SubObject();        
}


class SubObject implements Serializable
{
    
private static final long serialVersionUID = 4224332633725166867L;
    String   s   
=   "abc";   //String   is   OK,   because   String   is   java.io.Serializable   
}


class Save
{   //   in   Save.java   
    public void  main(String[] args)  
    
{   
      ObjectYouWannaSave   original   
=   new   ObjectYouWannaSave();   
      original.x 
= -1;   
      original.y 
= 100;                
      ObjectOutputStream   out   
=   null;   
      
try
      
{                       
          out   
=   new   ObjectOutputStream(new   FileOutputStream(new   File("c:/save.dat")));   
          out.writeObject(original);  
//将 对象写入持久
      }

      
catch(Exception e)
      
{  
        System.out.println(
"将实例写入文件出错:"+e.toString());
      }

      
finally
     
{   
          
try{out.close();}catch(Exception   e){}   
     }

   }
   
}

class Read
{   //   in   Read.java   
    public void main(String[] args)
    
{
       ObjectInputStream   in   
=   null;   
       
try{   
           in 
= new ObjectInputStream(new FileInputStream(new  File("c:/save.dat")));   
           ObjectYouWannaSave   o   
=   (ObjectYouWannaSave)in.readObject();   
           System.out.println(
"x="+o.x);
           System.out.println(
"y="+o.y);
           System.out.println(
"subobject.string=" + o.so.s);   
          }
catch(Exception e){   
          }
finally{   
              
try{in.close();}catch(Exception e){}   
          }
   
    }
   
}
 
public class TT
{

    
/**
     * 程序入口
     * 2007-01-19 19:43
     
*/

    
public static void main(String[] args) {
    
    
//    Save ss = new Save();
    
//    ss.main(args);
        Read rr = new Read();
        rr.main(args);
//  这是个最简单的例子,先运行Save,以后什么时候运行Read都可以(只要c:\save.dat文件还存在就可以了)  
    }

}

/**
 *     对象的寿命通常随着生成该对象的程序终止而终止,有时候,可能需要将对象的状态保存下来,
 *  在需要的时候再将对象恢复,我们把对象的这种记录自己状态的以便将来再生的能力,叫做对象
 *  的持续性(PERSISTENCE),对象通过写出描述自己状态的数值来记录自己,这个过程叫对象
 *  的串行化Serializable。串行化的主要任务是写出对象实例变量的值。如果变量是另一个对象
 *  的引用,则引用的对象也要串行化,这是个递归过程。
*/

抱歉!评论已关闭.