クラスの 2 つのオブジェクトが同じ参照を持つ場合、それらは次のように同じエンティティと関数を持つことはすでにわかっています。
Aone=newA();Atwo=one;
クラス A に x という名前の int メンバー変数があるとします。次に、次の操作を実行するとします。
2.x=100;
その場合、one.x の値も 100 になります。
別の例として、特定のメソッドのパラメータのタイプが People であるとします。
publicvoidf(Peoplep){px=200;}
このメソッドを呼び出すときに、zhang などの People のオブジェクトへの参照がパラメーター P に渡される場合、メソッドの実行後の zhang.x の値も 200 になります。
オブジェクトの「コピー」を取得したい場合があります。コピー エンティティを変更しても元のオブジェクト エンティティは変更されません。また、その逆も同様です。このようなコピーは、元のオブジェクトのクローン オブジェクト、または単にクローンと呼ばれます。
オブジェクト ストリームを使用すると、シリアル化されたオブジェクトのクローンを簡単に取得できます。オブジェクト出力ストリームが指す宛先にオブジェクトを書き込み、その宛先をオブジェクト入力ストリームのソースとして使用し、ソースから読み取ります。返されるオブジェクトは、元のオブジェクトのクローンである必要があります。つまり、オブジェクト入力ストリームは、オブジェクトのシリアル化情報を通じて現在のオブジェクトのクローンを取得します。たとえば、前のセクションの例のオブジェクト xinfei は、オブジェクト changhong のクローンです。
プログラムがオブジェクトのクローンをより速く取得したい場合、オブジェクトのシリアル化情報をディスク上のファイルに書き込む代わりに、オブジェクト ストリームを使用してメモリに書き込むことができます。オブジェクト ストリームは、オブジェクトのシリアル化情報をメモリに書き込むための基礎となるストリームとして配列ストリームを使用します。たとえば、前のセクションの例を見てみましょう。
FileOutputStreamfileOut=newFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);
そして
FileInputStreamfileIn=newFileInputStream(file);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
次のように変更します。
ByteArrayOutputStreamoutByte=newByteArrayOutputStream();ObjectOutputStreamobjectOut=newObjectOutputStream(outByte);
そして
ByteArrayInputStreaminByte=newByteArrayInputStream(outByte.toByteArray());ObjectInputStreamobjectIn=newObjectInputStream(inByte);
java.awt パッケージの Component クラスは、Serializable インターフェイスを実装するクラスであり、コンポーネントはシリアル化されたオブジェクトであるため、プログラムはコンポーネントを出力ストリームに書き込み、入力ストリームを使用してそのクローンを読み取ることができます。成分。