| 目次 | 前の項目 | 次の項目 | Java オブジェクト直列化仕様 |
書き込みと同様、ストリームから読み込むことは、複雑なことではありません。// Deserialize a string and date from a file. FileInputStream in = new FileInputStream("tmp"); ObjectInputStream s = new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject();まずInputStream(この場合はFileInputStream) がソースストリームとして必要です。次に、InputStreamから読み込むObjectInputStreamが作成されます。そして、文字列「Today」と日付オブジェクトがストリームから読み込まれます。通常、オブジェクトはreadObjectメソッドで読み込まれ、プリミティブはDataInputのメソッドによってストリームから読み込まれます。
readObjectメソッドは、ストリームにある次のオブジェクトを直列化復元し、readObjectから他のオブジェクトへの参照を再帰的に移動して、直列化する完全なオブジェクトグラフを作成します。プリミティブデータ型は、
DataInputインタフェースのメソッド (readInt、readFloat、readUTFなど) によってストリームから読み込まれます。個別のバイトと配列バイトは、InputStreamのメソッドによって読み込まれます。直列化可能フィールド以外のプリミティブデータはブロックデータレコードから読み込まれます。
ObjectInputStreamを拡張すれば、クラスに関してストリームにある情報を利用したり、直列化復元されたオブジェクトを置き換えることができます。詳細は、resolveClassとresolveObjectメソッドの説明を参照してください。