栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有不可序列化部分的Java序列化

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有不可序列化部分的Java序列化

正如其他人指出的那样,Josh Bloch的Effective
Java的
第11章是有关Java序列化的必不可少的资源。

该章中与您的问题有关的几点:

  • 假设您要序列化MyClass2中不可序列化字段的状态,则MyClass必须可以直接访问该字段,也可以通过getter和setter对其进行访问。MyClass必须通过提供readObject和writeObject方法来实现自定义序列化。
  • 不可序列化字段的类必须具有一个API,以允许获取其状态(用于写入对象流),然后实例化具有该状态的新实例(稍后从对象流中读取时)。
  • 根据有效Java的第74项,MyClass2 必须 具有MyClass可访问的no-arg构造函数,否则MyClass不可能扩展MyClass2并实现Serializable。

我在下面写了一个简单的例子来说明这一点。

class MyClass extends MyClass2 implements Serializable{  public MyClass(int quantity) {    setNonSerializableProperty(new NonSerializableClass(quantity));  }  private void writeObject(java.io.ObjectOutputStream out)  throws IOException{    // note, here we don't need out.defaultWriteObject(); because    // MyClass has no other state to serialize    out.writeInt(super.getNonSerializableProperty().getQuantity());  }  private void readObject(java.io.ObjectInputStream in)  throws IOException {    // note, here we don't need in.defaultReadObject();    // because MyClass has no other state to deserialize    super.setNonSerializableProperty(new NonSerializableClass(in.readInt()));  }}class MyClass2 {    private NonSerializableClass nonSerializableProperty;  public void setNonSerializableProperty(NonSerializableClass nonSerializableProperty) {    this.nonSerializableProperty = nonSerializableProperty;  }  public NonSerializableClass getNonSerializableProperty() {    return nonSerializableProperty;  }}class NonSerializableClass{  private final int quantity;  public NonSerializableClass(int quantity){    this.quantity = quantity;  }  public int getQuantity() {    return quantity;  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号