如何利用对象流序列化实战实现面向对象变量状态的持久化存储指南

冷漠man

冷漠man

2026-05-23

191人浏览

原创

java对象流序列化需三要素:类实现serializable接口并声明serialversionuid,用objectoutputstream与objectinputstream配对操作,通过transient控制字段序列化。

如何利用对象流序列化实战实现面向对象变量状态的持久化存储指南

对象流序列化是 Java 中实现面向对象变量状态持久化最直接、原生的方式。它不依赖第三方库,核心在于把内存中的对象“拍平”成字节流写入文件,再按需“复原”。关键不是记住语法,而是理解三件事:类要可序列化、流要配对使用、状态要可控。

让类具备序列化能力

只有实现了 Serializable 接口的类,其对象才能被 ObjectOutputStream 写出。这个接口是空的标记接口,不强制你写任何方法,但它告诉 JVM:“这个类的状态可以被保存”。

  • 必须显式声明 implements Serializable,否则调用 writeObject 会抛出 NotSerializableException
  • 建议手动添加 private static final long serialVersionUID = 1L; 字段,避免类结构微调后反序列化失败
  • transient 修饰的字段(如密码、临时缓存)不会被序列化,属于“状态白名单”控制手段

用对象输出流完成状态写入

ObjectOutputStream 不是独立工作的,它需要一个底层字节流(如 FileOutputStream)来承载数据。序列化过程本质是把对象图(包括引用的其他对象)转为二进制并写入文件。

星火作家大神
星火作家大神

星火作家大神是一款面向作家的AI写作工具

下载
  • 构造方式固定:new ObjectOutputStream(new FileOutputStream("data.dat"))
  • 调用 writeObject(obj) 即可保存整个对象,包括其所有非 transient、非静态成员变量
  • 如果对象中包含其他自定义类(如 Person 里有 Address),这些类也必须实现 Serializable,否则会报错

用对象输入流还原对象状态

反序列化是序列化的逆操作,从文件读取字节流,重建出结构、内容一致的 Java 对象。注意:它创建的是新对象,不是原对象的引用。

  • 构造方式对应:new ObjectInputStream(new FileInputStream("data.dat"))
  • 调用 readObject() 返回 Object 类型,必须强制转换为目标类型(如 (Person) ois.readObject()
  • 捕获 ClassNotFoundException 是必须的,因为 JVM 需要根据类名动态加载类定义

确保状态准确性的实用细节

序列化保存的是对象“快照”,但实际业务中常需控制哪些状态该留、哪些该丢、哪些要定制格式。

  • 重写 toString() 不影响序列化,但它能帮你快速验证反序列化后的对象内容是否正确
  • 若需更精细控制(比如只保存部分字段或加密敏感字段),应改用 Externalizable 接口,自行实现 writeExternal/readExternal
  • 文件扩展名无强制要求(.dat、.ser、.obj 均可),但建议统一命名便于识别用途
  • 不要在序列化前后修改类字段名或类型,否则反序列化大概率失败;版本号(serialVersionUID)是应对小范围演进的安全绳

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

3889

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

2860

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

2899

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

638

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

602

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

727

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1317

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

18846

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

647

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习