Java基础:对象序列化详解

发布时间:2026/11/6 2:29:51

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/10/28 7:19:18

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

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

2026/10/28 7:16:20

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

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

2026/11/5 7:24:05

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

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

2026/11/6 2:29:00

前缀和算法:高效解决区间求和问题的核心技术

1. 区间求和问题概述区间求和是算法竞赛和实际开发中常见的基础问题。给定一个固定数组和多个查询区间,要求快速计算出每个区间内元素的和。这个问题看似简单,但当数据量达到10^5级别时,直接遍历计算每个区间和的O(nm)时间复杂度方法就会变得…

2026/11/6 2:29:00

软件测试用例设计六大方法详解与实战

1. 软件测试用例设计方法概述在软件测试领域,测试用例设计是确保产品质量的关键环节。作为一名从业十余年的测试工程师,我深刻体会到合理选择测试方法对测试效率和缺陷发现率的影响。测试用例设计方法本质上是一套系统化的思维工具,帮助我们在…

2026/11/6 2:29:00

绿泡泡模拟器26版:真实还原IM交互的技术解析

1. 项目背景与核心功能最近在社交平台上看到一个挺有意思的小工具——"绿泡泡模拟器26版",号称能够1:1还原真实聊天场景。作为一个经常需要演示社交软件交互的产品经理,这类工具确实能解决不少实际需求。这个模拟器的核心卖点在于"真实还…

2026/11/6 2:29:00

汽车电子诊断标准化:ODX/OTX技术解析与应用实践

1. 项目概述在汽车电子系统复杂度呈指数级增长的今天,诊断效率已成为制约整车开发、生产和服务的关键瓶颈。传统诊断方式面临三大痛点:各ECU诊断协议不统一导致工具链碎片化;诊断数据格式混乱造成工程环节信息孤岛;诊断流程缺乏标…

2026/11/6 2:29:00

企业级网卡绑定技术实践与优化指南

1. 网卡绑定技术概述在现代企业网络架构中,网卡绑定(NIC Teaming)是一项提升网络可靠性和带宽利用率的关键技术。通过将多个物理网卡虚拟化为一个逻辑接口,我们能够实现负载均衡和故障转移的双重目标。在实际生产环境中&#xff0…

2026/11/6 2:24:00

鸿蒙系统分布式架构与开发者生态解析

1. 鸿蒙生态里程碑:8亿设备背后的技术突围当手机操作系统市场被两大巨头垄断十余年后,华为在2019年发布的鸿蒙系统(HarmonyOS)曾被外界视为"备胎计划"。但最新数据显示,这个"备胎"已经成长为参天大…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/6 1:03:39

MCU晶振电路设计全解析:从负载电容计算到PCB布局调试

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

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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