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

java中串行化的例子

2018年01月18日 ⁄ 综合 ⁄ 共 1914字 ⁄ 字号 评论关闭

下面是一个串行化的例子,程序中串行化保存name,hobby,birth和age,然而name是static的,我们将看到不能对static进行串行化,因此串行化后,改变会保持。hobby和birth是transient的,也不能串行化,但我们定义了自己的
private void writeObject(ObjectOutputStream os)
private void readObject(ObjectInputStream is)

并在其中对birth进行了自定义的写入与读出,因此会看到hobby变为了null,而birth得到保存。普通变量age显然可以正常得到保存,os.defaultWriteObject();就是对其进行保存。

同时可以看到,如果我们对某个类的对象进行串行化时,如果该类的父类没有实现Serializable接口,也就是说父类不能被串行化时,当反串行化后,会自动运行父类的构造函数,我们就是利用这个特点输出提示信息的。

package serializetest;

import java.io.*;

class Base
{
    public Base()
    {
           System.out.println("下面是我的个人信息:");
    }
}

public class Main extends Base implements Serializable
{
    static String name = null;
    transient String hobby = null;
    transient String birth = null;
    int age = 0;
   
    public Main()
    {
           name = "lcrystal";
           hobby = "sleep";
           birth = "1983/06/23";
           age = 24;
    }
   
    public static void main(String[] args)
    {
        Main ts = new Main();
 
 try
 {
  /* 任何文件名和后缀都可以 */
  FileOutputStream fos = new FileOutputStream("g://save.lc");
  ObjectOutputStream os = new ObjectOutputStream(fos);
  
  os.writeObject(ts);
  
  os.flush();
  os.close();
  fos.close();  
 }
 catch(Exception e)
 {
  System.out.println(e.getMessage());
 } 
 
 ts.name = "s0meb0dy";
 ts.hobby = "sleep"; /* 我仅有的爱好!*/
 ts.birth = null;
 ts.age = 27;
 
 try
 {
  FileInputStream fis = new FileInputStream("g://save.lc");
  ObjectInputStream is = new ObjectInputStream(fis);
  
  ts = (Main)is.readObject();
  
  is.close();
  fis.close();  
 }
 catch(Exception e)
 {
  System.out.println(e.getMessage());
 }
 
 System.out.println(ts.name);
 System.out.println(ts.hobby);
 System.out.println(ts.birth);
 System.out.println(ts.age);
    }
   
    private void writeObject(ObjectOutputStream os)
    {
 try
 {
     os.defaultWriteObject();
     os.writeUTF(birth);
 }
 catch(Exception e)
 {
     System.out.println(e.getMessage());
 }
    }
   
    private void readObject(ObjectInputStream is)
    {
 try
 {
     is.defaultReadObject();
     birth = is.readUTF();
 }
 catch(Exception e)
 {
     System.out.println(e.getMessage());
 }
    }
}
 

抱歉!评论已关闭.