序列化和反序列化问题

如果反序列化时的UID与序列化时的UID要保持一致,或者测试时一次序列操作对应一次反序列化操作,否则不匹配就报错。

img

也就是我序列化一个类后不能更改这个类里面的内容,要不然反序列化就会失败。那么我想问序列化反序列化还有什么作用,序列化反序列化不就是为了还原原来类里的内容吗,如果序列化后不能更改,那还有什么意义,我是直接新建一个类不也可以吗,原来的类不动不也一直保存着吗?

序列化和反序列化的意义在于让类对象可以在网络传输

我不是做java的,这里你应该混淆了一些概念。
序列化和反序列化的作用?(为什么要这样做)
===》如果在网络传输终中,我们要传输的一段字符,放在网络前,一般要做加密等处理(可以理解为序列化),而我们接收到这段数据后,要根据对应的方案做解析,获取到我们原来发送内容(这叫反序列化)
===》那么是不是可以理解序列化和反序列化就是对数据做处理,以及还原数据的过程。

我百度了一下,java中有对象序列化的概念,这里你又要理解一些概念:
类是啥?对象是啥?序列化反序列化是做什么?目的是什么?
我没做过java,站在自己的理解上:你可以对比上面网络的例子,对象对比上面要发送的内容,对象序列化操作对比上面的加密,对象反序列化对比上面的解密,到最后我们拿到原对象。 (注意这里加密解密肯定是不能随便改的,不然怎么能正常得到原数据)

除此之外,新创建一个对象所不能解决的问题是,这是新建的,不是原来你想用的那个,如果对象中有实际数据呢?

1.方便对象的深拷贝(深复制)
2.数据的持久化,通过序列化可以把数据永久地保存到硬盘上
3.数据的网络传输,比如常见的rpc框架,微服务框架利用序列化和反序列化来在client和server之间传输数据

Java反序列化是可以类不一致的,但前提是serialVersionUID 必须一致,我们可以手动设置serialVersionUID的值,同时类的属性可以有增减,但是属性名称不能更改,这样是可以保证即便类有改动,反序列化也是可以成功的

你完全理解错误了序列化和反序列化的作用
如果你想序列化之后再修改它的值,那你为什么不在序列化之前就把属性改了,而要序列化之后才去改呢?
要知道,不一定都是json的序列化,json可读性多少还强一些;如果直接序列化成二进制数据流,你改什么呀?
序列化反序列化最重要的作用就是网络传输和持久化时,你不用一项一项的去保存每一个属性,对方也不用一项一项的取出每一个属性然后赋值,直接这边序列化那边反序列化完事。
如果遇到版本更新,类有大的改动,那你可以维护两个版本,先反序列化成旧类,再一项一项的赋值给新类