最近、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 です。
前もって感謝します。