3
System.out.println("Hello brave souls!");

オブジェクトのシリアル化についていくつか質問があります。数学ゲームの新しいバージョンに取り組んでいますが、最後の3つのセッションでゲームモードを保存するのを忘れていました。レコードはオブジェクトのシリアル化によって保存されているため、ここに移動します。私が知りたいのは:

1.)オブジェクトのシリアル化は、オブジェクトがファイルに保存された時刻を何らかの形で保持しますか?2.)ファイル内のn個のオブジェクトのいずれかを変更する場合、変更するオブジェクトをメモリにロードし(ループを使用してオブジェクトを循環することにより)、変更してから、最後のすべてのオブジェクトを次のように書き換える必要がありますか?ファイル?//退屈なようです

4

2 に答える 2

3

シリアル化は、オブジェクトグラフ全体をシリアル化します。ゲームを保存する場合は、ObjectOutputStream.writeObject(myGame)を呼び出すことをお勧めします。これにより、ゲームオブジェクト全体と、それが参照するすべての非一時的なプロパティが再帰的に書き込まれます。

変更するには、ObjectInputStreamを使用してゲームをメモリにロードし、値を変更して、書き戻します。

大量のデータを処理している場合は、GZIPInputStreamとGZIPOutputStreamをチェーン化することもできます。これにより、シリアル化されたサイズが大幅に縮小される可能性があります。

非常に大きなオブジェクトを扱う場合は、RAMにすべてをロードせずに単一のフィールドを変更できるため、組み込みデータベースの方が適している場合があります。

最後に、オブジェクトがシリアル化されたときにオブジェクトのタイムスタンプを更新する場合は、Serializable疑似インターフェイスにwriteObjectメソッドを実装します。タイムスタンプを更新してから、提供されたObjectOutputStreamでdefaultWriteObjectを呼び出します。これにより、「最後に永続化された」動作が得られます。

private void writeObject(java.io.ObjectOutputStream out) throws IOException
于 2013-02-28T00:55:44.933 に答える
1

1.)オブジェクトのシリアル化は、オブジェクトがファイルに保存された時刻を何らかの形で保持しますか?

いいえ。オブジェクトとオブジェクトのみ、およびクラス名など、オブジェクトを再構成するために必要なものはすべて保存されます。

2.)ファイル内のn個のオブジェクトのいずれかを変更する場合

ファイル内のN個のオブジェクトを変更することはできません。ファイルをオブジェクトとして再構成し、オブジェクトを変更して、再シリアル化する必要があります。

//退屈なようです

退屈です。退屈ではないとは誰も言いませんでした。あなたはそれをデータベースとして使っています。そうではありません。これはシリアル化であり、これはストリームであることも意味します。まったく同じことがテキストファイルにも当てはまります。

于 2013-02-28T01:28:59.040 に答える