0

次のload()/ save()関数を使用してシリアル化しようとしているExpressionというクラスがあります。in.readObject()以前は、コードとExpressionクラスにいくつかの変更を加えた後、 throwsを呼び出すと正常に機能していましたClassCastException。エラーメッセージは次のとおりです 。java.lang.ClassCastException:java.lang.Stringをjava.io.ObjectStreamClassにキャストできません

4

2 に答える 2

0

私にとって、バイナリデータを文字列として保存するのは非常に悪いと感じています。ObjectOutputStreamのバイナリ出力を格納するために、より安定した方法を使用してみてください。文字列形式のアプローチに固執したい場合は、常に安全なBase64エンコーディングを使用してみてください。


私が問題として見るかもしれないのは、あなたが自分でserialUIDを静的定数に定義したということです:

private static final long serialVersionUID = 3L;

このUIDは、クラスパスのクラスが入力オブジェクトのクラスと互換性があるかどうかを判断するために使用されます。したがって、私が疑うのは、serialVersionUIDを変更せずにクラスを変更したことです。これにより、ObjectInputStreamは互換性があると見なされましたが、古いデータを引き続き使用しています。古いデータを削除して、新しいsave()呼び出しで再起動してください。


それInputもシリアル化可能ですか?そのクラスのUIDが破損していないということですか?

于 2012-12-05T21:18:55.433 に答える
0

シリアル化可能は、クラスメンバーのフィールドのNULL値を好まないようです。すべてのクラスメンバーが実際のメモリを持っていることを確認すれば、失敗しません。

于 2012-12-05T22:16:54.643 に答える