我有一个对象,其中包含一些我想序列化的不可序列化字段。它们来自我无法更改的单独API,因此使它们可序列化不是一种选择。主要问题是Location类。它包含所有我需要的可以序列化的四件事。如何使用read/writeObject创建可以执行以下操作的自定义序列化方法:

// writeObject:
List<Integer> loc = new ArrayList<Integer>();
loc.add(location.x);
loc.add(location.y);
loc.add(location.z);
loc.add(location.uid);
// ... serialization code

// readObject:
List<Integer> loc = deserialize(); // Replace with real deserialization
location = new Location(loc.get(0), loc.get(1), loc.get(2), loc.get(3));
// ... more code

我怎样才能做到这一点?

最佳答案

Java支持Custom Serialization。阅读“自定义默认协议(protocol)”部分。

去引用:



在这种方法中,如果需要,您可以将其序列化为其他形式,例如您说明的ArrayList或JSON或其他数据格式/方法,然后将其重新构造到readObject()上。

在您的示例中,添加以下代码:



private void writeObject(ObjectOutputStream oos)
throws IOException {
    // default serialization
    oos.defaultWriteObject();
    // write the object
    List loc = new ArrayList();
    loc.add(location.x);
    loc.add(location.y);
    loc.add(location.z);
    loc.add(location.uid);
    oos.writeObject(loc);
}

private void readObject(ObjectInputStream ois)
throws ClassNotFoundException, IOException {
    // default deserialization
    ois.defaultReadObject();
    List loc = (List)ois.readObject(); // Replace with real deserialization
    location = new Location(loc.get(0), loc.get(1), loc.get(2), loc.get(3));
    // ... more code

}

关于java - Java自定义序列化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7290777/

10-09 16:37
查看更多