最近、OCPJP7 試験の準備をするために、シリアライゼーションで少し遊んでいました。したがって、次のクラスをシリアル化しようとしました。
class TempClass implements Serializable {
int secCounter;
static int counter;
{
counter++;
}
{
secCounter=counter;
次に、次のようにオブジェクトを a に書き込もうとするFileOutputStreamと:
TempClass temp = new TempClass();
ObjectOutputStream obi = new ObjectOutputStream(new FileOutputStream(file));
obi.writeObject(temp);
obi.writeUnshared(temp);
obi.writeUnshared(temp);
したがって、ここで を使用して読み戻すと、3 つの異なるオブジェクトが取得されるObjectInputStreamため、3 つのオブジェクトが作成されます。secCounterただし、インスタンス変数であるためシリアル化できるの最終値は、3 ではなく 1 です。1 は、newキーワードを呼び出した回数です。 obi.writeUnshared(object). 正確に何が起こるか知っている人はいますか?静的変数がシリアル化されていないことはわかっていますが、上記の投稿されたコードでは、値を静的変数からインスタンス変数にコピーしましたsecCounter。したがって、最終的にsecCounterどの値が正常にシリアル化されているかを確認しても、(少なくとも私にとっては) 期待される結果は得られませんが、1 です。
前もって感謝します。