1、典型回答
序列化(Serialization)序列化是将对象转换为可存储或传输的形式的过程(例如: 将对象转换为字节流)
反序列化(Deserialization) 是将序列化后的数据(例如: 二进制文件)转换回原始对象的过程。通过反序列化,可以从存储介质 (如磁盘、数据库) 或通过网络传输的数据中恢复出对象的状态和数据。
序列化使用的主要场景:
- 数据持久化:通过序列化,可以将对象保存到磁盘或数据库中,以实现数据的持久化。这样,在程序重新启动后,可以从磁盘或数据库中读取对象,并将其恢复成内存中的对象。
- 网络传输:通过序列化,可以将对象转换为字节流,便于在网络中进行传输。网络传输需要将对象打包成字节流,然后发送给接收方,接收方再将字节流进行反序列化,恢复成对象。
2、全面剖析
序列化是指将对象转换为字节流的过程,使得对象能够在网络上传输或保存到磁盘上
在Java 中,通过实现 Serializable 接口来实现序列化,Serializable 接口本身并没有定义任何方法,它只是一个标记接口 (marker interface),用于告诉编译器和运行时环境这个类可以被序列化和反序列化。
序列化实现代码如下:
3、知识扩展
在序列化时,我们除了要实现 Serializable 接口,同时也要添加 serialVersionUID,那么 serialVersionUID 有什么用呢?
serialVersionUID 是用来进行版本控制的静态字段,是为了防止不同版本类冲突,以及类安全的。
具体来说,在进行反序列化时,JVM 会把传来的字节流中的 serialVersionUID 与本地相应实体类的serialVersionUID 进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是 InvalidCastException。这样做是为了保证安全,因为文件存储中的内容可能被篡改