源码:啥也没有
public interface Serializable {
}
Serializable是啥
- 一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。
- 可以看到下面的例子。我们创建一个Student类,然后实例对象。把他序列化。结果报错。因为没有实现Serializable接口。



- 如果我们将学生类,实现Serializable接口,就不会报错了。并生成了txt文件,存储了对象的字节序列。

- 再进行反序列化。


为什么呢,为什么实现了Serializable接口就可以序列化了呢?跟到底层源码。可以看到可以被序列化的可以是:字符串,数组,枚举,和实现了Serializable接口。


- serialVersionUID的用处。我们先序列化,然后给学生类,增加一个成员变量。再反序列化。我们发现报错了。显示serialVersionUID不匹配云云。

得到两个信息:1:serialVersionUID是序列化前后的唯一标识符。2:如果没有人为指定,编译器自动声明。 - serialVersionUID是序列化和反序列化的暗号。反序列化时,JVM把字节流中的序列号ID和被序列化类中的序列化ID进行对比,一致时才能被反序列化。否则报错。
- 如果不显示设定serialVersionUID,生成默认的。如果更改了类的结构或者信息,serialVersionUID也会跟着改变。所以最好是 认为设定serialVersionUID。
使用IntelliJ IDEA自动生成serialVersionUID


- 凡是被static修饰的字段是不会被序列化的
- 凡是被transient修饰的字段也是不会被序列化的(这个字段存放隐私值,如密码等)
- 下面的例子可以看到password字段被transient修饰,没有被序列化。


什么是序列化与反序列化?
-
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
-
把对象转换为字节序列的过程称为对象的序列化
-
把字节序列恢复为对象的过程称为对象的反序列化
Serializable接口就是Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。
那为什么还要继承Serializable。那是存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。
公众号:CodeSheep
https://baijiahao.baidu.com/s?id=1633305649182361563&wfr=spider&for=pc
本文介绍了Java中的Serializable接口,探讨了序列化和反序列化的过程。实现Serializable接口使得对象能够被序列化,serialVersionUID用于验证序列化前后的一致性。静态和transient修饰的字段不会被序列化。序列化可以用于高效地存储和传输对象状态,而反序列化则用于从字节序列恢复对象。

3079

被折叠的 条评论
为什么被折叠?



