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

Java 序列化與持久化:區別、聯繫與實戰詳解

     編輯:Java 綜合教學

核心概念辨析

  • 持久化:將內存對象保存到永久存儲(關係型數據庫、文件、XML 等),關注「存得下、取得回」。
  • 序列化:將對象轉為位元組流以便傳輸(進程間、網絡、磁盤),關注「對象↔流」的可逆轉換。

兩者高度重疊:序列化常作為持久化的手段(如將流寫入文件),但持久化還包含 SQL 映射、索引、事務等數據庫級能力。

Java 序列化機制

核心接口與類

  • java.io.Serializable:標記接口,實現後自動支持序列化。
  • ObjectOutputStream.writeObject():遞歸序列化對象圖,維護引用表防重複寫入。
  • ObjectInputStream.readObject():反序列化,需類路徑下存在同 serialVersionUID 的類。

自定義序列化

對 transient 或 static 字段,JVM 忽略自動序列化。可重寫:

private void writeObject(ObjectOutputStream out) throws IOException {
    out.defaultWriteObject();
    out.writeObject(socket.getInetAddress());
    out.writeInt(socket.getPort());
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    InetAddress addr = (InetAddress) in.readObject();
    int port = in.readInt();
    socket = new Socket(addr, port);
}

Externalizable 完全控制

實現 Externalizable 需自行實現 writeExternal/readExternal,靈活但安全風險較高(方法為 public),敏感數據需加密。

持久化方案選型

  • 關係型數據庫(主流):解決併發、提供統計分析,需 OR 映射(Hibernate/MyBatis)。
  • 文件/ XML/ 對象數據庫:適用於簡單場景或特定結構數據。

極端情況下可建單表 Object(OID, Bytes) 存序列化流,但喪失 SQL 查詢優勢。

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