实现Serializable的类不能是readObject

时间:2013-10-24 12:11:01

标签: java android serialization

我正在尝试使用以下序列化对:

private void writeObject(java.io.ObjectOutputStream out) throws IOException {
    if (mPair != null) {
        String first = mPair.first;
        String second = mPair.second;

        mPair = null;

        try {
            out.writeChars(first);
            out.writeChars("\n");
            out.writeChars(second);
        } catch (Exception e) {
        }
    }
}

private void readObject(java.io.ObjectInputStream in) throws IOException,
        ClassNotFoundException {
    try {
        String first = in.readLine();
        String second = in.readLine();

        mPair = new Pair<String, String>(first, second);
    } catch (EOFException e) {
        mPair = new Pair<String, String>("", "");
    }
}

当我的应用程序离开屏幕时,我调试writeObject正确地调用了我的3个自定义类对象,但是当我回到应用程序readObject时,永远不会被调用。

2 个答案:

答案 0 :(得分:1)

原来这个简单的解决方案似乎有效:

public class SerializableStringPair extends Pair<String, String> implements
    Serializable {

    private static final long serialVersionUID = 1L;

    public SerializableStringPair(String first, String second) {
        super(first, second);
    }
}

答案 1 :(得分:1)

另外两件事

  • 只需两个字符串就不需要特殊的代码来序列化或反序列化一个类。这是标准行为。只要声明为implements Serializable就像你做的那样。

  • 您问题中的代码包含错误:第二个字符串末尾没有换行符。使用readLine阅读时,序列化必须混淆。