2012-03-30 6 views

答えて

3

ObjectOutputStream

アンのObjectOutputStreamはOutputStreamにプリミティブデータ型とJava オブジェクトのグラフを書き込みます。 ObjectInputStreamを使用してオブジェクトを読み取る(再構成する)ことができます。 オブジェクトの永続ストレージは、ストリームのファイルを使用して達成することができます。 ストリームが ネットワークソケットストリームの場合、オブジェクトは別の ホストまたは別のプロセスで再構成できます。

java.io.Serializableインターフェイスをサポートするオブジェクトのみが、ストリームに書き込まれる になります。各直列化可能オブジェクトのクラスは、クラスのクラス名とシグネチャ、 オブジェクトのフィールドと配列の値、および初期オブジェクトから参照されるその他のオブジェクト のクロージャを含む にエンコードされます。

メソッドwriteObjectは、オブジェクトをストリームに書き込むために使用されます。文字列と配列を含む オブジェクトはすべてwriteObjectで書き込まれます。 複数のオブジェクトまたはプリミティブをストリームに書き込むことができます。 のオブジェクトは、対応するObjectInputstream から、同じタイプおよび書き込まれたのと同じ順序で読み取られなければなりません。

プリミティブデータ型は、 DataOutputの適切なメソッドを使用してストリームに書き込むこともできます。文字列は、writeUTFメソッド を使用して記述することもできます。

ObjectInputStream

アンObjectInputStreamのプリミティブデータを逆シリアル化し、以前にObjectOutputStreamを使って書かれ オブジェクト。

ObjectOutputStreamおよびObjectInputStreamは、それぞれ FileOutputStreamおよびFileInputStreamとともに使用すると、オブジェクトのグラフ用に永続ストレージを持つアプリケーション を提供できます。 ObjectInputStream は、以前にシリアル化されたオブジェクトを回復するために使用されます。他の用途 は、ソケットストリームを使用してホスト間でオブジェクトを渡すこと、またはリモートの 通信システムの 引数とパラメータを整列化および非整列化することを含みます。

ObjectInputStreamは、ストリームから作成されたグラフ のすべてのオブジェクトのタイプが、Java Virtual マシンに存在するクラスと一致することを保証します。クラスは、標準メカニズムを使用して必要に応じてロードされます。例えば

私はこの方法でデータを暗号化するための鍵ジェネレータを保存することができます:

public static void saveKeyToFile(SecretKey key) 
     throws FileNotFoundException, IOException { 
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
      "/path/to/mysavedobject")); 
    oos.writeObject(key); 
    oos.close(); 
} 

public static SecretKey getKeyFromFile(String dir) throws IOException, 
     ClassNotFoundException { 
    if (dir == null) { 
     dir = "/path/to/mysavedobject"; 
    } 
    SecretKey key = null; 
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
      dir)); 
    key = (SecretKey) ois.readObject(); 
    ois.close(); 
    return key; 
} 
関連する問題