中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

java序列化機制的示例分析

發布時間:2021-07-23 10:04:30 來源:億速云 閱讀:161 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關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

五河县| 连南| 衢州市| 广饶县| 南昌市| 宁阳县| 大安市| 兴宁市| 抚松县| 龙海市| 汝州市| 永嘉县| 滁州市| 饶河县| 绥滨县| 莎车县| 邓州市| 泗洪县| 景泰县| 青州市| 东城区| 光山县| 天全县| 阿拉善左旗| 天峨县| 盐城市| 湘潭市| 聂荣县| 伊吾县| 石阡县| 昂仁县| 合阳县| 湟中县| 达日县| 堆龙德庆县| 伊宁县| 文化| 江达县| 旅游| 德格县| 英德市|