なぜシリアル化を使用する必要があるのですか?
ネットワークを介してオブジェクトまたはデータを送信する場合は、バイトのストリームを使用できます。
一部のデータをディスクに保存する場合は、バイトストリームとともにバイナリモードを再度使用して保存できます。
では、シリアル化を使用する利点は何ですか?
6 に答える
技術的には、低レベルでは、シリアル化されたオブジェクトは、ケーブルまたはファイルシステムのバイトストリームとしても終了します...
したがって、オブジェクトをバイト ストリームに変換する標準化された、既に利用可能な方法と考えることができます。オブジェクトの保存/転送は非常に一般的な要件であり、すべてのアプリケーションでこの車輪を再発明する意味はほとんどありません。
他の人が述べたように、この object->stream_of_bytes 実装は非常に堅牢で、テスト済みで、一般的にアーキテクチャに依存しないことも知っています。
これは、オブジェクトを保存または転送するための唯一の受け入れ可能な方法であることを意味するものではありません。場合によっては、独自のメソッドを実装する必要があります。たとえば、不要なメンバーやプライベート メンバーを保存しないようにするためです (セキュリティやパフォーマンス上の理由など)。ただし、単純なケースであれば、自分で実装する代わりに、フレームワーク、言語、または VM のシリアル化/逆シリアル化を使用することで、作業を楽にすることができます。
お役に立てれば。
アーキテクチャ間で互換性がある理由は他にもあります。整数は、あるアーキテクチャから別のアーキテクチャへ、時にはあるコンパイラから別のコンパイラへと、同じバイト数を持っていません。
さらに、あなたが話しているのは、まだ連載です。バイナリ シリアル化。オブジェクトのすべてのバイトをまとめて保存し、後でオブジェクトとして再変換できるようにします。これがシリアライズです。
ウィキペディアの詳細
本からの引用Designing Data Intensive Applications
:
プログラムは通常、(少なくとも) 2 つの異なる表現でデータを操作します。
- メモリでは、データはオブジェクト、構造体、リスト、配列、ハッシュ テーブル、ツリーなどに保持されます。これらのデータ構造は、CPU による効率的なアクセスと操作 (通常はポインターを使用) のために最適化されています。
- データをファイルに書き込んだり、ネットワーク経由で送信したりする場合は、自己完結型のバイト シーケンス (JSON ドキュメントなど) としてエンコードする必要があります。ポインターは他のプロセスにとって意味をなさないため、このバイト シーケンスの表現は、通常メモリで使用されるデータ構造とはかなり異なって見えます。したがって、2 つの表現の間で何らかの変換が必要になります。メモリ内表現からバイト シーケンスへの変換はエンコード (シリアル化またはマーシャリングとも呼ばれます) と呼ばれ、その逆はデコード (解析、逆シリアル化、アンマーシャリング) と呼ばれます。
シリアル化とは、オブジェクトをストリームに変換して、(XML) などの任意の物理ファイルに保存したり、データベースに保存したりできるようにするプロセスです。C# でのシリアル化の主な目的は、オブジェクトを永続化し、ストリーム、物理ファイル、データベースなどの指定されたストレージ メディアに保存することです。
一般に、シリアライゼーションはオブジェクトの状態を永続化する方法ですが、この wiki ページを読むことをお勧めします。私の意見では、かなり詳細で正しいものです。