序列化是干什么的
为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。
序列化的几种方式
在Java中socket传输数据时,比较常见的做法有两种:
- 把对象包装成JSON字符串传输
- 采用Java对象的序列换与反序列化
Object Serialize
Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象
- 把Java对象转换为字节序列的过程称为对象的序列化。
- 把字节序列恢复为Java对象的过程称为对象的反序列化。
显示地定义serialVersionUID有两种用途:
- 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;在某些场合,不希望类的不同版本堆序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID
- 当你序列化了一个类实例后,希望更改一个字段或者添加一个字段,不设置serialVersionUID,所做的任何更改都将导致无法反序列化旧的实例,并在反序列化时抛出一个异常。如果你添加了serialVersionUID,在反序列旧的实例时,新添加或者更改的字段值将设为初始化值,字段被删除将不设置。