【语言】序列化及Java Serializable序列化接口

本文讨论了Java序列化的重要性和原理,指出序列化是将对象转换为字节流以便持久化或网络传输的过程。文章强调了序列化版本ID的重要性,因为它用于识别类并确保在类发生更改时仍能正确反序列化。未定义序列化方法的类在修改后可能会导致反序列化失败,尤其是在生产环境中,这种问题可能导致灾难性后果。因此,建议始终显式为可序列化类添加序列版本ID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2018.11.02

前言

某项目新版本上线,新版本中添加了A类,而A类最终会通过ObjectOutputStream#writeObject方法1序列化到HDFS中。而在上线完成之后才发现实现了Serializable序列化接口的A类并没有定义serialVersionUID,换言之,如果下次上线的版本A类发生了修改,就很有可能会导致serialVersionUID改变,进而反序列化就会失败。后果很重要,闻者都为虎躯一震。

Hello,序列化

序列化的定义就是将对象转换成字节流的过程1。那问题来了,对象好好的,为什么要转换成字节流呢?

对象  ---------------------------------------------发送方
   `
     ` (序列化)
       `
         `一串字节流 --> 网络|磁盘...  --------------中间介质
                           `
                             `(反序列化)
                               `
                                 `
                                 对象  -------------接收方

首先对象它是存在于它所在机器的内存里,一旦断电或者程序运行结束,它就会消失。那一旦我们想要持久化这个对象或者通过网络传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值