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

Java 序列化入門:從感性認識到核心機制

     編輯:Java 程式設計入門

極簡的序列化體驗

Java 的序列化設計極致體現了「簡單」哲學:只要類實現 java.io.Serializable 標記接口(無需實現任何方法),即可借助 ObjectOutputStream.writeObject() 與 ObjectInputStream.readObject() 輕鬆實現對象的持久化與還原。

完整示例:對象的序列化與反序列化

下面的代碼演示了構造對象、序列化到文件、再反序列化還原並打印的全過程:

package Stream;

import java.io.*;

public class Serial implements Serializable {
    int companyId;
    String companyAddr;
    boolean companyFlag;

    public Serial() {} // 無參構造器(非必需)

    public Serial(int companyId, String companyAddr, boolean companyFlag) {
        this.companyId = companyId;
        this.companyAddr = companyAddr;
        this.companyFlag = companyFlag;
    }

    public static void main(String[] args) {
        Serial serial1 = new Serial(752, "dayer street #5 building 02-287", false);

        FileInputStream in = null;
        FileOutputStream out = null;
        ObjectInputStream oin = null;
        ObjectOutputStream oout = null;

        try {
            out = new FileOutputStream("5.txt");
            oout = new ObjectOutputStream(out);
            serial1.serialize(oout); // 序列化
            oout.close();

            in = new FileInputStream("5.txt");
            oin = new ObjectInputStream(in);
            Serial serial2 = Serial.deserialize(oin); // 反序列化
            System.out.println(serial2); // 打印結果
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            // 資源關閉邏輯省略...
        }
    }

    /** 反序列化靜態工廠方法 */
    public static Serial deserialize(ObjectInputStream oin) throws Exception {
        return (Serial) oin.readObject();
    }

    @Override
    public String toString() {
        return "DATA: " + companyId + " " + companyAddr + " " + companyFlag;
    }

    /** 序列化實例方法 */
    public void serialize(ObjectOutputStream oout) throws Exception {
        oout.writeObject(this);
    }
}

運行結果

DATA: 752 dayer street #5 building 02-287 false

輸出與原始對象完全一致,驗證了默認序列化機制的正確性與易用性。

核心要點回顧

  • 標記接口:Serializable 無方法定義,僅作類型標識。
  • 雙向流:ObjectOutputStream 輸出,ObjectInputStream 輸入。
  • 自動遞歸:對象圖中所有可達對象自動遞歸序列化。
  • 構造器繞過:反序列化不調用構造器,直接按字段賦值。

這個「感性認識」示例為深入理解序列化的版本控制、性能優化、安全防範等進階主題奠定了基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved