如果你能回答以下关于 Java 序列化的问题,这篇文章你可以忽略。
① 什么是序列化和反序列?
② 为什么需要序列化,不用行不行?
③ 序列化的实现方式?
④ jdk 自带的序列化为什么要 serialVersionUID ,如果不写,有什么问题?
⑤ transient 对序列化的影响
1、什么是序列化和反序列化
① 序列化:把 Java 对象转换为字节序列,使用 writeObject
② 反序列化:把字节序列转化为 Java 对象,使用功能 readObject
2、什么情况下需要使用序列化?
序列化和反序列化是为了解决数据一致性问题。
对于数据的本地持久化,只需要将数据转换为字符串进行保存即可是实现,但对于远程的数据传输,由于操作系统,硬件等差异,会出现内存大小端,内存对齐等问题,导致接收端无法正确解析数据
① 当你想要把内存中的对象保存到一个文件或者数据库中的时候;
② 当你想要序列化在网络上传送对象时;
③ 当你想要用 RMI(Remote Method Invocation,远程方法调用)时。
不用序列化行不行?答案是不行。
当我们在使用 writeObject 时,会检查对象是否是 Serializable
3、序列化的方式
在 Java 中,我们的类实现 Serializable,然后生成 serialVersionUID
为什么需要 serialVersionUID?
如果我们不生成,编译器会自动生成一个,在反序列化时,如果 serialVersionUID 不一致,会报错
除了 jdk 的序列化方式,还有....
4、transient 对序列化的影响
在某些场景下,我们需要写入或者还原的数据中其实有我们不需要透露或者说不想暴露给外部的数据,如果我们将这些隐私的数据序列化,在反序列化出来, 那么这些信息就泄漏了。而 transient 关键字呢,就是防止这种事情的发生. 当属性被加上了 transient 关键字以后,序列化时不会将该属性的值给写入,所以反序列化的时候我们会发现原本写入的数据,还原出来是 null.
欢迎关注 @Python 大星 ,一个会点 Python 的 Java 程序员。如果你有更好的想法,欢迎留言,一起探讨,想说你就说啊!后面继续分享 Java 的相关开发,人少就散了吧!
@Python 大星 | 文
本文暂时没有评论,来添加一个吧(●'◡'●)