1

あるJavaプログラム/クラスでシリアル化可能なオブジェクトのインスタンスを宣言してから、別のプログラム/クラスで内部オブジェクトの定義を完全に繰り返し、データファイルから大きな複雑なオブジェクトをロードすることは可能ですか?目標は、ビルドマシンにローカルに保存されているアイテムのエディターを作成し、ゲーム自体を作成して、ゲームをプレイしたい人に配布できるようにすることです。

私は趣味のプロジェクトとしてJavaでゲームを書いています。私のゲーム内には、親クラスであるGameItemを拡張するクラスのファミリーがあります。アイテムは、HealingPotion、Bomb、KeyItemなどのさまざまなファミリにある可能性があります。

class GameItem implements Serializable {
String ItemName
String ImageResourceLocation
....}

私がやりたいのは、特定のアイテムファミリーの各アイテムを作成する方法の定義を含めることですが、ゲームをプレイするときに発生する可能性のあるすべてのアイテムを含むGameItemListという大きなクラスがあります。

class GameItemList implements Serializable {
LinkedList<GameItem>gameItemList;
//methods here like LookUpByName, LookUpByIndex that return references to an item
}

おそらくある時点で、プレーヤーが新しいゲームを開始するとき、またはゲームが起動するときに、次のようなことを行います。

//create itemList
FileInputStream fileIn = new FileInputStream("items.dat");
ObjectInputStream in = new ObjectInputStream(fileIn);
GameItemList allItems = (GameItemList)in.readObject();
in.close();
//Now I have an object called allItems that can be used for lookups.

みんなありがとう、コメントや助けをいただければ幸いです。

4

3 に答える 3

3

オブジェクトをシリアル化すると、。でマークされていない限り、オブジェクトのすべてのフィールドがシリアル化されtransientます。そして、この動作はもちろん再帰的です。そうです、オブジェクトをシリアル化してから逆シリアル化することができます。逆シリアル化されたオブジェクトは、シリアル化されたオブジェクトと同じ状態になります。動作が異なると、シリアル化は役に立たなくなります。

ただし、データの長期保存にはネイティブシリアル化を使用しません。シリアル化されたオブジェクトは検査が難しく、テキストエディタを使用して変更することは不可能であり、古いバージョンのクラスとの下位互換性を維持することは困難です。XMLやJSONのようなもっとオープンなフォーマットを使います。

于 2012-06-05T21:59:06.160 に答える
1

はい、それは可能です。オブジェクトが正しくシリアル化されている場合、そこで実行されているアプリケーションが逆シリアル化されるクラスの定義を知っている限り、他のマシンで逆シリアル化できます。

于 2012-06-05T22:02:05.053 に答える
1

これは機能しますが、Javaのシリアル化は、クラスの「進化」を困難にすることで有名です。内部表現は、ディスク上の形式に明示的に関連付けられています。これはカスタムのリーダー/ライターメソッドで回避できますが、オブジェクトのシリアル化ではなく、JSONやXMLなどのより移植性の高い形式を検討することもできます。

于 2012-06-05T22:14:35.193 に答える