2012-01-25 13 views
1

シリアライズの概念を理解しようとしています。多くの記事では、シリアル化はオブジェクトを一連のバイト(バイナリデータ)に変換するプロセスであり、ネットワーク経由でオブジェクトを送信する際に非常に便利です。シリアライズの概念 - java - C#

私はここでいくつかの混乱を得ました。私は、リモートプロシージャに渡すクラスのオブジェクトを持っているとしましょう。私がオブジェクト手段を言うとき、それ自体は同じコンピュータのビットとバイトのセットを表します(コンピュータはビットとバイトの形式のデータを保持します)。ここでは、そのビットとバイトをネットワーク経由で転送しています。右 ?私はここでシリアル化の概念を理解していません。

何か助けていただければ幸いです。ありがとう。

答えて

2

クラスのオブジェクトには、ポインタや参照などが文字列やその他のサブオブジェクトに含まれます。これらのポインタは、送信側コンピュータのアドレス空間でのみ意味のあるメモリアドレスであるため、ネットワーク経由で別のコンピュータに送信された場合には有効ではありません。

つまり、ワイヤを介してメモリに存在するオブジェクトのバイトを送信すると、その反対側のシェルだけが取得され、その内容はすべて失われます。オブジェクトは、代わりに無意味なメモリ位置へのポインタを含むだけです。

シリアル化のプロセスでは、これらのポインタに続いてオブジェクトの終わりにあるオブジェクトをシリアル化し、オブジェクトグラフ全体をワイヤで送信し、もう一方の端で再アセンブリしてポインタを修正します宛先コンピュータのアドレス空間用。

0

シリアル化は、オブジェクト状態の表現であり、転送用または格納用です。 環境を完全に管理している場合は、メモリデータの書き出しを行い、あとで読み直すことができます。

完全に制御できない場合は、バイナリデータの書き込みと解析の仕様が必要です。たとえば、イメージ、サウンド、およびビデオフォーマットは、指定されたメディアをバイナリ直列化および逆シリアル化する方法に関する仕様です。

2つの異なるプログラミング環境(C#とJava)の間でオブジェクトを渡す必要がある場合。 2つの環境間で生のオブジェクト状態を渡すことはできないため、シリアライゼーション用のプロトコルを選択する必要があります。あなたはこれを行う独自のロジックを書くことができます.netとjavaはバイナリデータとオブジェクト生成の解析をサポートしています。あるいは、SOAPなどのパブリック仕様を使用して、シリアライズおよびデシリアライズに標準ライブラリを使用することもできます。