Java基础:对象序列化详解

发布时间:2026/9/11 10:51:39

Java基础:对象序列化详解 在我们平日开发中经常让PO类去实现Serializable接口然后让其可序列化。不过有时我们并不是特别清楚为什么要序列化特别是对于纯Web项目开发的同学来说需求环境不一定能用上。下面我简单和大家分享下自己对序列化的认知。一、什么是序列化序列化就是把Java对象转换成字节序列的过程。反之把字节序列恢复成Java对象的过程就叫反序列化。二、为什么要序列化在网络通信的过程中我们的数据是需要变成字节序列才能在网络上进行传输。对于消息发送方来说需要把Java对象转成字节序列才能发送对于消息接收方来说则需要把字节序列转成Java对象方能在内存中使用。另一个场景就是需要把对象数据保存到硬盘也就是做持久化。因为Java对象是在JVM中生成属于内存数据那么要保存到硬盘则需要把它转换成二进制流字节序列也就是序列化。三、怎样实现序列化1、实现Serializable或者Externalizable这两个接口当中之一在Java环境下需要序列化的类必须实现Serializable或者Externalizable这两个接口当中之一。Externalizable是继承Serializable在jdk1.3之前因Serializable是完全递归的算法导致效率低下因此Externalizable是一个很好的替换方案。不过随着jdk版本的性能不断优化Serializable的性能问题已经得到妥善的解决。现在大多数开发人员都是使用Serializable。Externalizable反而因其使用操作较为繁琐需要无参构造方法、重载writeExternal和readExternal实现而不被广泛使用。package serialization; import java.io.Serializable; public class Boy implements Serializable { private static final long serialVersionUID -1886667037093879690L; private String name null; private Integer age null; public Boy(){ System.out.println(无参构造); } public Boy(String name, Integer age) { this.name name; this.age age; } Override public String toString() { return [ name , age]; } }2、序列化Java中我们使用ObjectOutputStream这个类进行序列化。通过把需要序列化的对象作为参数传给writeObject方法。补偿一点的是ObjectOutputStream代表着对象输出流它可以把对象写入到目标输出流里面。//文件保存着字节序列 File file new File(Boy.txt); //序列化持久化对象 ObjectOutputStream out new ObjectOutputStream(new FileOutputStream(file)); Boy boy new Boy(Mark, 18); out.writeObject(boy); out.close();3、反序列化与序列化ObjectOutputStream类相对应的ObjectInputStream用于反序列化。我们可以调用它的readObject方法来读取字节序列然后把该序列反序列化成对象。//反序列化并得到对象 ObjectInputStream in new ObjectInputStream(new FileInputStream(file)); // 没有强制转换到Person类型 Object newBoy in.readObject(); in.close(); System.out.println(newBoy);4、运行结果a、生成boy.txtib.反序列化并打印相关信息[Mark, 18]四、注意点1、被transient关键字和修饰的属性将不会被序列化并不是对象所有属性我们都想进行序列化的比如账号的密码。对于这种情况我们可以用transient来修饰那么这个字段就不会被序列化。运行结果[null, 18]2、反序列化过程中被没有调用对象的构造方法。在发序列化过程中被没有调用包括无参构造方法在内的所有构造器。这点从运行结果看出没有执行无参构造方法。序列化的目的之一就是记录对象当时的状态而构造方法有可能会对这个状态产生影响因此反序列化时会调用native方法去处理。
延伸阅读

更多相关文章

2026/9/11 10:51:39

Django多功能校园网站毕设全攻略:从选题到部署的完整复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 10:51:39

数据安全:通用的数据加密方法(AES、RSA、数字签名和数字证书)

在日常的接口交互中,数据的安全性是优先考虑的问题之一。那么一般我们在实际工作中如何去保证数据的安全呢?一般是通过数据加密的方式来处理。加密算法,如果按是否可以把密文还原成明文来划分的话,可以分为可逆加密和不可逆加密。…

2026/9/11 10:51:39

消息队列:MQ架构设计优化

消息队列,在复杂系统中应用广泛。虽然说加入mq后,系统的复杂度提高、系统可用性也变低而且可能引发数据出现一致性的问题,那么为什么还要用MQ呢?其实主要是其在特殊的场景下能解决我们很多问题。一、MQ使用的主要场景使用MQ主要场…

2026/9/11 11:46:46

AI Agent科研工作流实战:Kimi+扣子分层协作指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 11:46:46

DBSCAN优化实现与相似记录检测实践

1. 项目概述DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的经典聚类算法,在相似重复记录检测领域有着广泛应用。不同于传统的精确匹配,DBSCAN能够发现任意形状的簇,并有效识别…

2026/9/11 11:46:46

RK3568+OpenHarmony多路显示系统级实战:DRM、设备树与HDI协同

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 11:46:46

基于eBPF的零插桩全链路追踪:DeepFlow(deer-flow)实战解析

1. 从零认识deer-flow:它到底解决了什么问题 做后端开发或者运维的同学,多多少少都经历过这种场景:线上服务出问题了,用户反馈接口特别慢,你打开监控面板一看,CPU、内存、磁盘这些基础指标全部正常&#xf…

2026/9/11 11:41:46

deer-flow实战:可视化编排打造高效自动化工作流

1. 项目概述:deer-flow 是什么,能解决什么问题1.1 从"搬数据"到"跑流程",deer-flow 到底改变了什么先说说我为什么会对 deer-flow 这个项目这么上心。做了十多年后端开发和系统集成,我最烦的就是一类活儿&…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码