在Java中序列化是什么_JavaSerializable接口应用说明
发布时间 - 2026-01-29 00:00:00 点击率:次Java序列化是将对象转为字节流以存储或传输,需显式实现Serializable接口作为JVM安全检查的硬性门槛;transient和static字段不参与序列化,反序列化不调用构造函数;因体积大、性能差、语言绑定强及安全风险,生产环境推荐Jackson等替代方案。
Java序列化就是把内存里的对象“拍扁”成一串字节,以便存文件、走网络或跨JVM传递;Serializable接口

为什么必须实现 Serializable 接口?
不实现它,调用 ObjectOutputStream.writeObject() 会直接抛 NotSerializableException。JVM靠这个接口做安全检查,不是语法糖,是硬性准入门槛。
- 接口无方法,纯标记作用,但必须显式声明:
class Person implements Serializable - 若父类没实现,子类实现也没用——父类字段不会被序列化(除非父类也实现了或字段是
transient) - 推荐显式声明
private static final long serialVersionUID,否则JVM自动生成,类结构稍有变动(如加个字段)就可能反序列化失败
ObjectOutputStream 和 ObjectInputStream 怎么用?
这是序列化/反序列化的“搬运工”,底层依赖 FileOutputStream/FileInputStream 等流,但你只管对象,不用操心字节怎么拼。
- 写入时:用
FileOutputStream包一层,再套ObjectOutputStream,然后调writeObject(obj) - 读取时:顺序必须严格对应,先开
FileInputStream,再套ObjectInputStream,再调readObject()并强制转型 - 注意捕获两个异常:
IOException(流问题)和ClassNotFoundException(反序列化时找不到类定义)
try (FileOutputStream fos = new FileOutputStream("user.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(new User("Alice", 28));
} catch (IOException e) {
e.printStackTrace();
}
哪些字段不会被序列化?常见陷阱有哪些?
默认只序列化非 static、非 transient 的实例字段。但真正踩坑的往往不是规则,而是隐含行为。
-
transient字段跳过序列化,但反序列化后为默认值(null、0、false),不会调构造函数重置 - 如果类里有不可序列化的成员(比如
Thread、Socket),又没标transient,运行时才报错 - 集合类如
ArrayList可序列化,但里面存了自定义对象,那些对象也得实现Serializable,否则链路断在中间 - 反序列化不走构造函数(包括无参构造),所以初始化逻辑(如字段赋默认值、资源预加载)不会执行
什么时候该换别的序列化方式?
原生 Java 序列化适合开发调试、RMI、老系统内部通信,但生产环境要谨慎:
- 字节体积大、性能慢,比 JSON 或 Protobuf 大 3–5 倍,序列化/反序列化耗时高
- 完全 Java 生态绑定,无法被 Go/Python 等语言解析
- 存在严重反序列化漏洞风险(如
InvokerTransformer链),除非你完全信任数据来源,否则别用在 HTTP 请求体或 MQ 消息中 - 类结构变更兼容性差——删字段、改类型、改访问修饰符都可能让旧数据无法读取
真正需要跨服务、高性能或安全可控时,Serializable 就该让位给 Jackson(JSON)、Kryo 或 Protobuf。
# python
# java
# js
# json
# go
# 字节
# stream
# 为什么
# jvm
# Static
# NULL
# 父类
# 子类
# 构造函数
# 接口
# class
# private
# Thread
# 对象
# http
# 序列化
# 绑定
# 安全检查
# 默认值
# 这是
# 是个
# 什么时候
# 找不到
# 能让
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
香港服务器租用每月最低只需15元?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
昵图网官方站入口 昵图网素材图库官网入口
Laravel storage目录权限问题_Laravel文件写入权限设置
如何打造高效商业网站?建站目的决定转化率
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Bootstrap整体框架之CSS12栅格系统
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Laravel如何使用模型观察者?(Observer代码示例)
Laravel如何使用.env文件管理环境变量?(最佳实践)
JavaScript Ajax实现异步通信
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Java垃圾回收器的方法和原理总结
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Swift开发中switch语句值绑定模式
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何在IIS7中新建站点?详细步骤解析
如何在Ubuntu系统下快速搭建WordPress个人网站?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
网站制作价目表怎么做,珍爱网婚介费用多少?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
个人网站制作流程图片大全,个人网站如何注销?
怎么用AI帮你为初创公司进行市场定位分析?
三星、SK海力士获美批准:可向中国出口芯片制造设备
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何在 Pandas 中基于一列条件计算另一列的分组均值
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel如何实现模型的全局作用域?(Global Scope示例)
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
如何用美橙互联一键搭建多站合一网站?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
phpredis提高消息队列的实时性方法(推荐)
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
免费网站制作appp,免费制作app哪个平台好?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
大连 网站制作,大连天途有线官网?
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
如何利用DOS批处理实现定时关机操作详解
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
微信小程序 HTTPS报错整理常见问题及解决方案
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何用狗爹虚拟主机快速搭建网站?

