「こんにちは、アミーゴ!連載についてもう少し詳しくお話したいと思います。」
私たちのクラスに何らかのInputStreamへの参照が含まれているとします。だったら連載できないですよね?
「そうです。あなた自身、ストリームはシリアル化できないと言いました。そして、シリアル化できないデータを持つオブジェクトをシリアル化することはできません。」
「そうです。そのとおりです。しかし、クラスがその状態において重要な役割を果たさないデータを格納しているにもかかわらず、そのクラスが直列化可能なクラスとみなされない場合はどうなるでしょうか? クラスが不要なものを格納している可能性があることは気にしないでください。これを破棄する可能性があります。データはいつでも、そしてもしかしたら常にそうかもしれません。」
このような場合に備えて、Java の作成者はtransientキーワードを考え出しました。このキーワードをメンバー変数の前に記述すると、シリアル化中に無視されます。その状態は保存または再構築されません。まるで存在しなかったかのように。これは、ちょうど私たちが検討した状況に当てはまります。
キャッシュとvolatile修飾子を覚えていますか? 例外のないルールはありません。
この幸福の一例を次に示します。
シリアル化では不可視な変数を含む «cat» の例:
コード
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
transient public InputStream in = System.in;
}
GO TO FULL VERSION