溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java序列化機制詳細介紹

發布時間:2021-09-18 16:16:37 來源:億速云 閱讀:131 作者:chen 欄目:編程語言

本篇內容介紹了“java序列化機制詳細介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

序列化是指對象通過寫出描述自己狀態的數值來記錄自己的過程,即將對象表示成一系列有序字節,Java提供了將對象寫入流和從流中恢復對象的方法。對象能包含其它的對象,而其它的對象又可以包含另外的對象。Java序列化能夠自動的處理嵌套的對象。對于一個對象的簡單域,writeObject()直接將其值寫入流中。

當遇到一個對象域時,writeObject()被再次調用,如果這個對象內嵌另一個對象,那么,writeObject()又被調用,直到對象能被直接寫入流為止。程序員所需要做的是將對象傳入ObjectOutputStream的writeObject()方法,剩下的將有系統自動完成。

要實現序列化的類必須實現的java.io.Serializable或java.io.Externalizable接口,否則將產生一個NotSerializableException。該接口內部并沒有任何方法,它只是一個"tagging interface",僅僅"tags"它自己的對象是一個特殊的類型。

類通過實現 java.io.Serializable接口以啟用其序列化功能。未實現此接口的類將無法使其任何狀態序列化或反序列化??尚蛄谢惖乃凶宇愋捅旧矶际强尚蛄谢?。

序列化接口沒有方法或字段,僅用于標識可序列化的語義。Java的"對象序列化"能讓你將一個實現了Serializable接口的對象轉換成一組byte,這樣日后要用這個對象時候,你就能把這些byte數據恢復出來,并據此重新構建那個對象了。

代碼如下

package stream;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;import javax.security.auth.login.AccountException;import org.junit.jupiter.api.Test;/* * 對象流 *   用與存儲和讀取基本數據類型數據 或 對象的處理劉。它的強大之處就是可以把java中的對象轉換成流 *  * */public class ObjectInputStreamTeat {  /*   * 序列化過程:將內存中的java對象保存到磁盤或通過網絡傳輸出去   * 使用ObjectOutputStream    * */  @Test  public void testObjectOutputStream() {    ObjectOutputStream oos = null;    try {      oos = new ObjectOutputStream(new FileOutputStream("Object.dat"));      oos.writeObject(new String("我是中國人"));      oos.flush();            oos.writeObject(new Person("zsben",1,new Account(2000)));      oos.flush();          } catch (Exception e) {      e.printStackTrace();    }    finally {      try {        if(oos!=null)          oos.close();      } catch (Exception e) {        e.printStackTrace();      }    }  }    /*   * 反序列化:用ObjectInputStream實現   * */  @Test  public void testObjectInputStream() {    ObjectInputStream ois = null;    try {      ois = new ObjectInputStream(new FileInputStream("Object.dat"));      Object object = ois.readObject();      String string = (String)object;      System.out.println(string);            Object object2 = ois.readObject();      Person person = (Person)object2;      System.out.println(person);          } catch (Exception e) {      e.printStackTrace();    }    finally {      try {        if(ois!=null)          ois.close();      } catch (Exception e) {        e.printStackTrace();      }    }  }}/* * 1.Person類要實現可序列化,必須實現可序列化接口Serializable * 2.還需要添加一個最終類屬性UID * 3.除了當前Person類需要實現Serializable,還要保證其內部所有屬性都是可序列化的 *   (默認情況下基本數據類型為可序列化) * 對象流不能序列化static 和transient修飾的成員 * */class Person implements Serializable{  public static final long serivalVersionUID = 5432146546351568416L;    private String name;  private static int age;  private Account account;   @Override  public String toString() {    return "Person [name=" + name + ", age=" + age + ", account=" + account + "]";  }  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 Person(String name, int age) {    super();    this.name = name;    this.age = age;  }    public Person(String name, int age, Account account) {    super();    this.name = name;    this.age = age;    this.account = account;  }  public Person() {    super();  }  }class Account implements Serializable{  private double balance;  static final public long serivalVersionUID = 54685237864535874L;  @Override  public String toString() {    return "Account [balance=" + balance + "]";  }  public double getBalance() {    return balance;  }  public void setBalance(double balance) {    this.balance = balance;  }  public Account(double balance) {    super();    this.balance = balance;  }  public Account() {    super();  }}

“java序列化機制詳細介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女