java 为什么序列化 java为什么需要序列化_java中冒号是什么意思



如果你能回答以下关于 Java 序列化的问题,这篇文章你可以忽略。

① 什么是序列化和反序列?

② 为什么需要序列化,不用行不行?

③ 序列化的实现方式?

④ jdk 自带的序列化为什么要 serialVersionUID ,如果不写,有什么问题?

⑤ transient 对序列化的影响


1、什么是序列化和反序列化


java 为什么序列化 java为什么需要序列化_java 为什么序列化_02


① 序列化:把 Java 对象转换为字节序列,使用 writeObject

② 反序列化:把字节序列转化为 Java 对象,使用功能 readObject


java 为什么序列化 java为什么需要序列化_java中nextint是什么意思_03

Person


java 为什么序列化 java为什么需要序列化_java transient关键字_04

SerializeTest


java 为什么序列化 java为什么需要序列化_java中冒号是什么意思_05

DeSerializeTest


java 为什么序列化 java为什么需要序列化_java中nextint是什么意思_06


2、什么情况下需要使用序列化?

序列化和反序列化是为了解决数据一致性问题。

对于数据的本地持久化,只需要将数据转换为字符串进行保存即可是实现,但对于远程的数据传输,由于操作系统,硬件等差异,会出现内存大小端,内存对齐等问题,导致接收端无法正确解析数据

① 当你想要把内存中的对象保存到一个文件或者数据库中的时候;

② 当你想要序列化在网络上传送对象时;

③ 当你想要用 RMI(Remote Method Invocation,远程方法调用)时。

不用序列化行不行?答案是不行。


java 为什么序列化 java为什么需要序列化_java中jsr303是什么_07


当我们在使用 writeObject 时,会检查对象是否是 Serializable


java 为什么序列化 java为什么需要序列化_java中nextint是什么意思_08


3、序列化的方式

在 Java 中,我们的类实现 Serializable,然后生成 serialVersionUID


java 为什么序列化 java为什么需要序列化_java中冒号是什么意思_09


为什么需要 serialVersionUID?

如果我们不生成,编译器会自动生成一个,在反序列化时,如果 serialVersionUID 不一致,会报错


java 为什么序列化 java为什么需要序列化_java中jsr303是什么_10


除了 jdk 的序列化方式,还有....


java 为什么序列化 java为什么需要序列化_java中冒号是什么意思_11


4、transient 对序列化的影响

在某些场景下,我们需要写入或者还原的数据中其实有我们不需要透露或者说不想暴露给外部的数据,如果我们将这些隐私的数据序列化,在反序列化出来, 那么这些信息就泄漏了。而 transient 关键字呢,就是防止这种事情的发生. 当属性被加上了 transient 关键字以后,序列化时不会将该属性的值给写入,所以反序列化的时候我们会发现原本写入的数据,还原出来是 null.


java 为什么序列化 java为什么需要序列化_java 为什么序列化_12



@Python 大星 | 文


java 为什么序列化 java为什么需要序列化_java中nextint是什么意思_13