現在的位置: 首頁 > 綜合 > 正文

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());
 }
    }
}
 

抱歉!評論已關閉.