为什么一定要实现Serializable接口,它的底层原理是什么。序列化的目的是什么,tostring方法和序列化有什么关系,返回json数据和序列化又有什么关系
序列化是什么
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 所以把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化 无论什么编程语言,其底层涉及IO操作的部分还是由操作系统其帮其完成的,而底层IO操作都是以字节流的方式进行的,所以写操作都涉及将编程语言数据类型转换为字节流,而读操作则又涉及将字节流转化为编程语言类型的特定数据类型。
什么时候要用到序列化
当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化
- 大白话来说,只要涉及到IO操作一定要用Serializable来修饰
- toString方法只是涉及到转成字符串操作,没有涉及到IO操作。所以单纯使用toString方法可以不用实现这个接口
- 例如FastJson转json本质上和tostring一样,只不过是json格式
- 微服务框架,RPC的时候一定更用,因为JavaBean转json再转Javabean的开销大
Serializable接口概述
Serializable只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象
但是这个接口里面什么都没有,只是一个标识
也就需要一种方式来让JVM知道在进行IO操作时如何将对象数据转换为字节流,以及如何将字节流数据转换为特定的对象,而Serializable接口就承担了这样一个角色。
Serializable相关关键字
序列化和反序列化的验证凭证,唯一标识符
private static final long serialVersionUID = 1L;
trasient关键字:序列化的时候忽略这个属性
private transient String password
总结
Serializable在RPC中的时候有用,平常使用FastJson就行了
