1.概念:允许把内存中的JAVA 对象转换为与平台无关的二进制流,从而允许把这种二进制流持久的保存在硬盘上,或通过网络将这种二进制流传输到另一个网络节点,当其他程序获取了这种二进制流,可以恢复成原来的JAVA对象
2.序列化的好处在于可以将任何实现Serializable接口的对象转换为字节数据,使其在保存和传输时可以被还原
3.序列化是RMI(Remote Method lnvoke-远程方法调用)过程的参数和返回值都必须实现的机制,而RIM是JAVAEE的基础。因此序列化机制是JAVAEE平台的基础
4.想要对象序列化,那么对应的类必须实现Serializable或Externalizable接口(其中之一)
ps:static 或者 transient 修饰的属性无法被序列化,不会报错,但是读取的时候值为null
凡是实现了Serializable接口的类 都有一个表示序列化版本标识符的静态常量
private static final long serialVersionUID
serialVersionUID用来表明类的不同版本的兼容性
如果类没有定义这个变量,那么它的值是JAVA运行时环境根据类的内部细节自动生成,若类的源代码做了修改那么serialVersionUID可能会变
作用
希望类的不同版本对序列化兼容,因此要确保类的不同版本具有相同的serialVersionUID
不希望类的不同版本对序列化兼容,因此要确保类的不同版本具有不同的serialVersionUID
白话文:假如在磁盘的文件中写入一个对象没有给serialVersionUID值的话 java 会自动给它一个 如果类的内容发生修改 那么他的serialVersionUID会变 ,之前的那个可能就找不到了
网友评论