0

次のようにペアをシリアル化しようとしています:

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呼び出されませんでした。

4

2 に答える 2

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);
    }
}
于 2013-10-24T12:28:50.960 に答える
1

2つの追加事項

  • 2 つの文字列だけでクラスをシリアル化または逆シリアル化するための特別なコードは必要ありません。これは標準的な動作です。implements Serializable あなたがしたように宣言するだけです。

  • 質問のコードにエラーが含まれています。2 番目の文字列の末尾に改行がありません。それを で読むとreadLine、シリアル化が混乱するはずです。

于 2013-10-24T13:11:18.963 に答える