pc官方网站,南昌哪家网站建设最好,想搞一个自己的网站怎么做,建设厅网站用户名和密码概述
序列化#xff1a;将对象写入到 IO 流中反序列化#xff1a;从 IO 流中恢复对象
实现方法
实现 Serializable 或者 Externalizable
Serializable#xff1a;标记接口#xff0c;不用实现任何方法#xff0c;可以指定序列化 IDExternalizable#xff1a;增强的序…概述
序列化将对象写入到 IO 流中反序列化从 IO 流中恢复对象
实现方法
实现 Serializable 或者 Externalizable
Serializable标记接口不用实现任何方法可以指定序列化 IDExternalizable增强的序列化标记接口提供了 writeExternal 和 readExternal 两个接口方法这两个方法在序列化和反序列化的过程中会被调用
注意序列化 ID 只是一个版本号两种方法都可以不指定JVM 会根据类中的信息自动计算一个序列化版本号。不指定序列化版本号可能存在如下隐患
不同版本的 JVM 可能会有不同的计算规则可能会导致类的信息完全一致但是序列化失败在类中的信息被修改后由于 JVM 计算出来了不同的版本号则很可能导致序列化失败
Serializable 和 Externalizable 的区别
实现 Serializable 不用额外实现方法但是实现 Externalizable 必须实现 writeExternal 和 readExternal 两个方法实现 Externalizable 必须要提供 public 修饰的无参构造器否则会报错Serializable 不需要无参构造器实现 Externalizable 必须把所有需要序列化的属性在 writeExternal 中一一手动序列化所有需要反序列化的属性在 readExternal 中一一手动反序列化Serializable 由 JVM 自动完成
Serializable 的扩展点
可以实现 private void writeObject(ObjectOutputStream out) 来自定义序列化逻辑注意必须使用完全一致的方法名和 private 修饰符可以实现 private void readObject(ObjectInputStream in) 来自定义反序列化逻辑注意必须使用完全一致的方法名和 private 修饰符当某个属性上加上了 transient 关键字后这个属性将不会被序列化
注意点
当一个序列化对象存在一个引用类型的对象时这个对象也必须是可实例化的或者加上 transient 关键字否则会报错同一对象只会被序列化成二进制流一次不会重复序列化单例类被序列化时需要重写 readResolve 方法否则会破环单例机制