Java序列化

时间:2021-09-06
本文章向大家介绍Java序列化,主要包括Java序列化使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.什么是序列化?

•序列化:序列化是将对象转化为字节流(IO流)。

•反序列化:反序列化是将字节流转化为对象。

2.序列化的用途?

•序列化可以将对象的字节序列持久化-保存在内存、文件、数据库中。

•在网络上传送对象的字节序列。

•RMI(远程方法调用)

3.序列化和反序列化

•序列化:java.io.ObjectOutputStream 类的 writeObject() 方法可以实现序列化

•反序列化:java.io.ObjectInputStream 类的 readObject() 方法用于实现反序列化。

Serializable 接口
被序列化的类必须属于 Enum、Array 和 Serializable 类型其中的任何一种。

如果不是 Enum、Array 的类,如果需要序列化,必须实现 java.io.Serializable 接口,否则将抛出 NotSerializableException 异常。

这是因为:在序列化操作过程中会对类型进行检查,如果不满足序列化类型要求,就会抛出异常。

4.serialVersionUID

serialVersionUID 有什么作用,如何使用 serialVersionUID?

serialVersionUID 是 Java 为每个序列化类产生的版本标识。它可以用来保证在反序列时,发送方发送的和接受方接收的是可兼容的对象。如果接收方接收的类的 serialVersionUID 与发送方发送的 serialVersionUID 不一致,会抛出 InvalidClassException。

如果可序列化类没有显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值。尽管这样,还是建议在每一个序列化的类中显式指定 serialVersionUID 的值。因为不同的 jdk 编译很可能会生成不同的 serialVersionUID 默认值,从而导致在反序列化时抛出 InvalidClassExceptions 异常。

serialVersionUID 字段必须是 static final long 类型。

原文地址:https://www.cnblogs.com/ssh1314/p/15235008.html