シリアル化を行っていますが、次のことを理解できません。
このコードの出力が次のようになる理由がわかりません。
import java.io.*;
public class InnerOuterTest {
public static ObjectOutputStream out;
public static ObjectInputStream in;
static {
try {
out = new ObjectOutputStream(new FileOutputStream("save.ser"));
in = new ObjectInputStream(new FileInputStream("save.ser"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
try {
ShouldForgive f = new ShouldForgive();
f.x = 5;
write(f);
ShouldForgive g = read();
System.out.println(g.x);
f.x = 0;
g.x=8;
write(f);
ShouldForgive v = read();
System.out.println("is "+v.x);
} finally {
out.close();
in.close();
}
}
private static void write(ShouldForgive f) throws IOException {
out.writeObject(f);
}
public static ShouldForgive read() throws ClassNotFoundException, IOException {
return (ShouldForgive) in.readObject();
}
}
class ShouldForgive implements Serializable {
int x = -1;
}
は
5
8
そしてそうではない
5
0
f == g
false を返すものと、入力ストリームをリセットした場合を試しました。実装readObject
すると、一度しか呼び出されないことがわかりました...この動作がわかりません。(オブジェクトが 1 回だけ読み取られるのはなぜですか?)
シリアル化が 1 回しか行われないような気がします... オブジェクトはどのように追跡されますか? 実装しても、ファイルから実際に読み書きしなくても、まだ得られreadObject
ますwriteObject
8