ObjectInputStream クラスと ObjectOutputStream クラスは、それぞれ、InputStream クラスと OutputStream クラスのサブクラスです。 ObjectInputStream クラスおよび ObjectOutputStream クラスによって作成されるオブジェクトは、オブジェクト入力ストリームおよびオブジェクト出力ストリームと呼ばれます。オブジェクト出力ストリームは writeObject(Object obj) メソッドを使用してオブジェクト obj をファイルに書き込み、オブジェクト入力ストリームは readObject() を使用してオブジェクトをプログラムに読み取ります。
ObjectInputStream クラスと ObjectOutputStream クラスの構築メソッドは次のとおりです。
ObjectOutputStream のポインタは出力ストリーム オブジェクトである必要があるため、オブジェクトをファイルに書き込む準備をするときは、まず OutputStream のサブクラスを使用して出力ストリームを作成します。
たとえば、FileOutputStream を使用してファイル出力ストリームを作成すると、コードは次のようになります。
FileOutputStreamfileOut=newFileOutputStream(tom.txt);ObjectOutputStreamobjectout=newObjectOutputStream(fileOut);
同様に、ObjectInputStream のポインタは入力ストリーム オブジェクトである必要があるため、ファイルからプログラムにオブジェクトを読み取る準備をするときは、まず、InputStream のサブクラスを使用して入力ストリームを作成します。
たとえば、FileInputStream を使用してファイル入力ストリームを作成すると、コードは次のようになります。
FileInputStreamfileIn=newFileInputStream(tom.txt);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
オブジェクト ストリームを使用してオブジェクトの書き込みまたは読み取りを行う場合は、オブジェクトがファイルに書き込まれ、プログラムに正しく読み取れるようにするために、オブジェクトがシリアル化されていることを確認してください。
クラスがSerializable インターフェイス(java.io パッケージ内のインターフェイス) を実装している場合、このクラスによって作成されるオブジェクトは、いわゆるシリアル化されたオブジェクトです。 Java クラス ライブラリによって提供されるオブジェクトのほとんどは、いわゆるシリアル化されています。 Serializable インターフェイスにはメソッドがないため、このインターフェイスを実装するクラスは追加のメソッドを実装する必要がないことを強調しておく必要があります。もう 1 つ注意すべき点は、オブジェクト ストリームを使用してオブジェクトをファイルに書き込む場合、オブジェクトをシリアル化するだけでなく、オブジェクトのメンバー オブジェクトもシリアル化する必要があることです。
Serializable インターフェイスのメソッドはプログラムからは見えないため、このインターフェイスを実装するクラスは追加のメソッドを実装する必要はありません。シリアル化されたオブジェクトがオブジェクト出力ストリームに書き込まれるとき、JVM は Serializable Write インターフェイスにメソッドを実装します。特定の形式のテキスト (オブジェクトのシリアル化情報) を宛先に送信します。 ObjectInputStream オブジェクト ストリームがファイルからオブジェクトを読み取るとき、オブジェクトのシリアル化情報がファイルから読み戻され、オブジェクトのシリアル化情報に基づいてオブジェクトが作成されます。
たとえば、オブジェクト ストリームを使用して、TV クラスによって作成されたオブジェクトの読み取りと書き込みを行います。
TV.java
importjava.io.*;publicclassTVimplementsSerializable{Stringname;intprice;publicvoidsetName(Strings){name=s;}publicvoidsetPrice(intn){price=n;}publicStringgetName(){returnname;}publicintgetPrice(){returnprice;}}
メイン.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){TVchanghong=newTV();changhong.setName(Changhong TV);changhong.setPrice(5678);Filefile=newFile(television.txt);try{FileOutputStreamfileOut=newFileOutputStream (ファイル);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);objectOut.writeObject(changhong);objectOut.close();FileInputStreamfileIn=newFileInputStream(file);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);TVxinfei=(TV)objectIn.readObject();objectIn .close();xinfei.setName(Xinfei TV);xinfei.setPrice(6666);System.out.println(changhong の名前:+changhong.getName());System.out.println(changhong の価格:+ changhong.getPrice ());System.out.println(xinfei の名前:+xinfei.getName());System.out.println(xinfei の価格:+xinfei.getPrice());}catch(ClassNotFoundExceptionevent){System .out.println(オブジェクトを読み取れません);}catch(IOExceptionevent){System.out.println(event);}}}