0

ゲームを作っています。ゲーム デザイナーはGameオブジェクトを作成し、それをハード ドライブに保存します。ゲームをプレイするために、ユーザーGameはハード ドライブからオブジェクトをロードします。GameオブジェクトはですSerializableGameオブジェクトには、他の何千ものオブジェクト ( 、MapPersonなどTile) が含まれており、そのすべてもSerializableです。

残念ながら、誤って新しい機能をゲームに追加してしまいました: というクラスLargeです。Serializableにインターフェースを実装するのを忘れていましたLarge。次に、かなりの時間をかけて作業しLargeた既存のファイルにオブジェクトを追加しました。ファイルGameを保存すると、例外が発生しました。GameNotSerializableException

このエラーから回復して、使用可能な形式でハード ドライブからファイルを取得しようとしていGameます。これにより、ゲームを最初から作成し直すことなくゲームのデザインを続けることができます。残念ながら、ファイルを読み込もうとすると、NotSerializableException. 次の戦略を試しましたが、成功しませんでした。

  • Serializable私のLargeクラスに実装する
  • ' large' 変数を作成しますtransient

他に解決策はありますか?

4

1 に答える 1

-1

ゲームが実際に保存されたのは確かですか? ファイルを保存しているときに例外が発生した場合、オブジェクトをシリアル化できなかったと思います。

実際に直面している問題は、これらの種類のものにシリアル化されたオブジェクトを使用することの大きな欠陥です。次のいずれかのようなクラスに変更を加えた瞬間、古いシリアル化されたオブジェクトは互換性がなくなります。

  1. フィールドを削除する
  2. オブジェクトのスーパークラスを変更する
  3. 非静的フィールドを静的に変更する (またはその逆)
  4. フィールドのタイプを変更します。

独自のデータ形式を使用する必要があります (まだ間に合います)。選択したデータ形式を選択したり、XML や JSON を使用することもできます (後者は最近軽量であるため人気が高まっています)。オブジェクトをすばやく簡単に保存するための API も用意されています。

于 2013-02-11T00:34:01.613 に答える