首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 序列化實戰:transient 關鍵字與物件持久化範例

     編輯:Java 相關知識

序列化核心概念

Java 序列化將物件狀態轉為位元組流,便於寫入檔案、網路傳輸或資料庫存儲。實作 java.io.Serializable 介面(標記介面,無方法)即可賦予類別序列化能力。反序列化則將位元組流還原為物件。

完整代碼範例

package test;
import java.io.*;

public class Test implements Serializable {
    int i = 0;
    // transient 關鍵字:標記此欄位不參與序列化
    transient int j = 0;

    public static void main(String[] args) {
        Test test = new Test();
        test.i = 3;
        test.j = 7;
        System.out.println("序列化前: i=" + test.i + ", j=" + test.j);

        // --- 序列化(寫入檔案) ---
        try (FileOutputStream fos = new FileOutputStream("c:\\test.obj");
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {
            oos.writeObject(test);
            System.out.println("物件已寫入檔案");
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        // --- 反序列化(讀取檔案) ---
        try (FileInputStream fis = new FileInputStream("c:\\test.obj");
             ObjectInputStream ois = new ObjectInputStream(fis)) {
            Test test1 = (Test) ois.readObject();
            System.out.println("反序列化後: i=" + test1.i + ", j=" + test1.j);
            // 輸出: i=3, j=0 (j 為預設值 0,因未序列化)
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

關鍵點解析

概念說明
implements Serializable宣告類別可序列化,JVM 自動處理預設序列化邏輯。
transient修飾實例變數,序列化時跳過該欄位。反序列化後該欄位為類型預設值(int=0, 物件=null)。適用於敏感資料(密碼)、衍生欄位、非序列化物件引用。
ObjectOutputStream高層流,writeObject() 將物件圖(含引用鏈)寫入底層輸出流。
ObjectInputStream對應輸入流,readObject() 還原物件圖,需強制轉型。
try-with-resourcesJDK 7+ 語法,自動關閉流,避免資源洩漏(範例已採用)。

進階考量

  • serialVersionUID:建議顯式宣告 private static final long serialVersionUID = 1L;,確保版本演進時反序列化相容性。
  • 自定義序列化:實作 private void writeObject(ObjectOutputStream) 和 private void readObject(ObjectInputStream) 可控制複雜邏輯(如加密、補充瞬態欄位)。
  • 繼承與序列化:父類別若未實作 Serializable,反序列化時父類建構子會被調用,需注意初始化邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved