Java序列化和反序列化例子

c6g3 9年前發布 | 3K 次閱讀 Java

序列化簡單說就是為了保存在內存中的各種對象的狀態(也就是實例變量,不是方法),雖然你可以用你自己的各種各樣的方法來保 存object states,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。

反序列化正好相反,就是將保存的對象讀出來,實例為對象。

下面是一個完整而形象的例子:

/**

  • 對象序列化與反序列化
  • */
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;

/* 需要持久化的類

  • 要想使類支持對象序列化,只需要實現Serializable接口 */
    class Person implements Serializable {

    private static final long serialVersionUID = 3456126674259028540L;
    / 屬性 /
    private String id;
    private String password;
    private String name;
    private int age;
    // 如果不想對某些屬性進行序列化,則需加上transient修飾符
    private transient String sex;

    / setter和getter方法 /
    public String getId() {

     return id;  
    

    }

    public void setId(String id) {

     this.id = id;  
    

    }

    public String getPassword() {

     return password;  
    

    }

    public void setPassword(String password) {

     this.password = password;  
    

    }

    public String getName() {

     return name;  
    

    }

    public void setName(String name) {

     this.name = name;  
    

    }

    public int getAge() {

     return age;  
    

    }

    public void setAge(int age) {

     this.age = age;  
    

    }

    public String getSex() {

     return sex;  
    

    }

    public void setSex(String sex) {

     this.sex = sex;  
    

    }

    / 覆蓋toString方法 /
    public String toString() {

     return "對象信息:" + id + " " + password + " " + name + " " + age + " "  
             + sex;  
    

    }

}

/*

  • 實現了對象序列化和反序列化的類 */
    public class SeriObject {

    /**

    • 序列化
    • @param person
    • 對象名
    • @param file
    • 指定文件 */
      public void writePerson(Person person, String file) {
      try {
      // 對象輸出流,指向指定文件
      ObjectOutputStream out = new ObjectOutputStream(
      new FileOutputStream(file));
      out.writeObject(person);// 將對象寫入文件
      out.flush();// 清空
      out.close();// 關閉
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      }

      }

      /**

    • 反序列化
    • @param file
    • 指定文件 */
      public void readPerson(String file) {
      try {
      // 對象輸入流,來源于指定文件
      ObjectInputStream in = new ObjectInputStream(new FileInputStream(
      file));
      Object o = in.readObject();// 將對象從文件讀出
      in.close();// 關閉
      if (o != null) {
      if (o instanceof Person)
      System.out.println(o.toString());
      }
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      } catch (ClassNotFoundException e) {
      e.printStackTrace();
      }
      }

      public static void main(String[] args) {
      /*

      • 測試代碼 */
        Person person = new Person();
        person.setId("aaa");
        person.setPassword("bbb");
        person.setName("張三");
        person.setAge(20);
        person.setSex("男");

      SeriObject so = new SeriObject();
      so.writePerson(person, "person.txt");
      so.readPerson("person.txt");
      }

} </pre>

 本文由用戶 c6g3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!