HoRain云--Java序列化
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍一、JDK 原生序列化怎么用serialVersionUID版本控制的命门想更细粒度控制二、为什么企业级项目基本不用原生序列化三、替代方案怎么选四、面试几句能加分的话Java 序列化说白了就是把内存里的对象转成字节流序列化或者把字节流还原成对象反序列化用来做持久化、网络传输、RPC、缓存存储、深拷贝这些事。JDK 自带了一套基于Serializable的机制但实际生产里已经很少裸用了——下面把怎么用 坑在哪 用什么替代一次讲清。一、JDK 原生序列化怎么用核心就三样Serializable标记接口、ObjectOutputStream/ObjectInputStream、再加两个关键字transient和serialVersionUID。class User implements Serializable { private static final long serialVersionUID 1L; private String name; private int age; private transient String password; // 不参与序列化 }序列化 / 反序列化// 序列化 try (ObjectOutputStream oos new ObjectOutputStream( new FileOutputStream(user.dat))) { oos.writeObject(user); } // 反序列化 try (ObjectInputStream ois new ObjectInputStream( new FileInputStream(user.dat))) { User u (User) ois.readObject(); }几个关键点Serializable是标记接口没有任何方法只告诉 JVM这个类可以序列化否则抛NotSerializableExceptiontransient​ 修饰的字段会被跳过反序列化后是默认值null/0常用于密码、临时缓存、派生字段静态字段不会被序列化——它属于类不属于对象父类实现Serializable子类自动可序列化反过来不行serialVersionUID版本控制的命门如果不手动声明JVM 会根据类名、字段、方法等算一个哈希值。只要类结构稍微一动加个字段、改个方法哈希就变旧字节流在新类上反序列化直接InvalidClassException。private static final long serialVersionUID 1L; // 手动写死结构兼容就不改 规则只有破坏性变更旧数据真的不该再反序列化才改 UID加字段、改注释这种兼容改动不用动它。想更细粒度控制writeObject/readObject在类里私有限定这两个方法JVM 会回调里面先调defaultWriteObject()处理非 transient 字段再自己加逻辑比如重建 transient 派生值、做校验readResolve()反序列化完返回哪个对象你说了算单例保护神器防止反序列化搞出第二个实例ExternalizableSerializable的子接口自己实现writeExternal/readExternal完全掌控字节格式但样板代码多二、为什么企业级项目基本不用原生序列化这块是面试高频也是新手最容易只背概念、不理解后果的地方问题说明反序列化漏洞RCE​反序列化不只是读数据还会触发对象重建逻辑如readObject、hashCode。攻击者可以构造恶意字节流利用 Commons Collections 这类库的 gadget chain 在反序列化时执行任意代码。WebLogic、JBoss 当年中招的都是这个​性能差​基于反射字节流里塞了大量类元数据类名、包名、父类…体积大、CPU 高比 Protobuf/Kryo 慢一个量级跨语言不行​只有 JVM 认得Go/Python/C 解析不了分布式多语言场景直接出局版本脆弱​类结构一变就容易炸微服务各自部署节奏不一致就是灾难可读性为零​二进制类信息线上排查基本靠猜还有个容易被忽略的点反序列化还能导致 OOM——恶意构造的对象图循环引用、超大 Map、gadget chain 无限递归能把堆吃完。⚠️ 所以现在的共识是不可信来源的字节流绝对不要直接ObjectInputStream.readObject()。如果一定要用至少做白名单ObjectInputFilter、限大小、验来源。三、替代方案怎么选原生序列化基本只在纯 Java 简单本地持久化 不在乎跨语言这种窄场景才用。主流替代JSONJackson / Gson / FastJSON文本、可读、跨语言、生态最广慢一点、体积大但系统边界HTTP API、对外接口首选注意 FastJSON 老版本有漏洞要跟到新版本ProtobufGoogle二进制、体积小、快、跨语言、schema 演进友好要写.protogRPC 默认搭档分布式 RPC、跨语言服务间通信首选Hessian二进制、跨语言、Dubbo 早期默认比原生快但不如 Protobuf 极致Kryo纯 Java 里最快最小的之一Spark / Flink 在用不跨语言版本兼容也比 Protobuf 弱游戏、纯 Java 低延迟 RPC、缓存Redis 存 Java 对象合适AvroSchema Registry 那套事件流 / 数据管道演进强Kafka 场景多见速记选型HTTP 接口 / 对外 API​ → JSON跨语言 RPC​ → Protobuf或 Thrift纯 Java 高性能 / 缓存​ → Kryo事件流管道​ → Avro四、面试几句能加分的话序列化不走静态字段、transient才是排除字段的正解serialVersionUID不手写 JVM 按类结构算类一改旧数据全废单例要加readResolve()否则反序列化会新建实例原生序列化最大的问题不是性能是反序列化 RCE生产禁用或严加过滤选型先看边界是不是跨语言 / 要不要演进再看性能如果想再往下挖可以聊ObjectInputFilter怎么配白名单、Protobuf 的 proto2 vs proto3 差异或者Kryo 为什么线程不安全——挑一个❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧

相关新闻

2026贵阳黄金回收哪家服务好?正规商家选择与避坑指南

2026贵阳黄金回收哪家服务好?正规商家选择与避坑指南

2026贵阳黄金回收哪家服务好?正规商家选择与避坑指南贵阳作为西南地区重要的消费城市,居民持有闲置贵金属、奢侈品的规模逐年增加,贵阳黄金回收也成为本地闲置资产流通的重要环节。2026年,不少居民在处置闲置黄金资产时&#xff0…

2026/7/3 17:46:02 阅读更多 →
HoRain云--Java发送邮件

HoRain云--Java发送邮件

🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…

2026/7/3 17:44:01 阅读更多 →
美团LongCat-2.0本地部署实战:国产ASIC万亿MoE模型3天完整实测

美团LongCat-2.0本地部署实战:国产ASIC万亿MoE模型3天完整实测

6月30号美团放出LongCat-2.0开源消息的当天,我就拉着机房里8张国产ASIC卡的小集群开始折腾。前后耗了整整3天,从驱动编译、权重分片到服务跑通压测,中间踩的坑够写半本踩坑手册。 很多人盯着1.6万亿参数、5万卡国产集群、SWE-bench Pro 59.5分…

2026/7/3 17:44:01 阅读更多 →

最新新闻

银发科技与多元渠道的“价值共振”:银发智能科技产品与线上线下渠道对接会圆满落幕

银发科技与多元渠道的“价值共振”:银发智能科技产品与线上线下渠道对接会圆满落幕

​2026年6月30日下午,由AgeClub(上海银创同行科技有限公司)主办、上海市养老科技产业园协办的“数智银发,生态共赢——银发智能科技产品与线上线下渠道对接会”在产业园403报告厅圆满举行。活动汇聚了如身机器人、程天科技、小维健…

2026/7/3 18:36:40 阅读更多 →
IntelliJ UI自动化测试框架:Remote Robot原理、配置与最佳实践

IntelliJ UI自动化测试框架:Remote Robot原理、配置与最佳实践

1. 项目概述:IntelliJ UI 测试机器人如果你正在为你的 IntelliJ IDEA 插件编写功能测试,或者想自动化一些繁琐的 IDE 操作流程,那么手动点击、肉眼观察的方式很快就会让你感到力不从心。尤其是在插件功能复杂、涉及多个对话框和菜单交互时&am…

2026/7/3 18:32:39 阅读更多 →
临沂不锈钢铝蜂窝吊顶选材技术参数与性能评测要点

临沂不锈钢铝蜂窝吊顶选材技术参数与性能评测要点

在建筑装饰材料市场,临沂不锈钢铝蜂窝吊顶产品正逐步替代传统石膏板与铝扣板吊顶,成为公共空间与高端住宅装修的热门选项。这种材料本质是一种“三明治结构”,核心在于将不锈钢面板与高强度铝蜂窝芯通过专用复合工艺紧密压合。选材与评测&…

2026/7/3 18:32:39 阅读更多 →
【hive学习笔记2】

【hive学习笔记2】

笔记关联-hive学习笔记 测试Demo 1.首先在windows上(本地)创建几个文件(放一列数据),如:2.在hive建表3.上传数据上传成功显示4.测试查询hive系统架构上图所示是hive的主要组件及其与Hadoop的交互方式&#…

2026/7/3 18:30:39 阅读更多 →
act仿真,任务层

act仿真,任务层

整体分层 任务与环境层:sim_env.py(关节空间控制)、ee_sim_env.py(末端位姿控制)、scripted_policy.py(脚本策略)、assets(MuJoCo XML 场景)。数据层:record…

2026/7/3 18:30:39 阅读更多 →
英伟达RTX Spark超级芯片深度解析:AI PC如何重塑个人计算与工作流

英伟达RTX Spark超级芯片深度解析:AI PC如何重塑个人计算与工作流

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 英伟达和微软联手,这次真的把“AI PC”这个概念给做实了。不是那种在现有硬件上跑个AI助手就宣称自己是AI PC的“贴牌”…

2026/7/3 18:28:38 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻