シリアル化とは
コンピュータープログラミングでは、「シリアル化」とは、ローカルメモリに格納されたデータ構造を取得し、それをネットワーク経由で送信したり、ディスクに格納して別のプログラムで再構築および使用したりできるバイトストリームに変換するプロセスです。 シリアル化は、オブジェクトの状態を保存して、同じプログラムで後でリロードできるようにするためにも使用できます。moreこのより複雑な使用法は、リモートプロシージャコールを呼び出すことです(RPC) networkネットワークを介して別のコンピューターで効果的にプロシージャを実行します。このメカニズムにより、大規模なネットワークシステムにデータオブジェクトを分散することもできます。
ほぼすべての現代のコンピューター言語には、シリアル化のネイティブサポートまたはこの機能を追加するために利用できるライブラリがあります。オブジェクトがシリアル化されると、objectオブジェクトのすべてのフィールドがフラット化されます。またはマーシャリング。データは、任意の出力ストリームに書き込める1次元のバイト列に変換されます。出力ストリームのタイプは重要ではなく、ファイルまたはネットワークソケットである可能性があります。
データがシリアル化されて最終的な場所に送信されると、de逆シリアル化のプロセスが開始されますバイトストリームを読み取るプログラムは、すべての情報を復元し、元のオブジェクトの新しいインスタンスに配置して、 exact「オブジェクトが保持していたデータのみがマーシャリングされることを理解することが重要です。 「オブジェクトとそのメソッド、およびその他の実装データはそうではありません。」これは、データをデシリアライズするプログラムが、「最初に」シリアライズされたクラスのインスタンスを作成できる必要があることを意味します。
データ構造のシリアル化は、さまざまな目的に使用できます。オブジェクト情報を物理メディアに保存できるため、すべてのオブジェクトの正確な状態を、プログラムの実行が停止した時点まで復元できます。toリモートプロシージャを実行させる別のコンピューターにメッセージを送信します。シリアル化を使用して、リアルタイムアプリケーションの状態変化を効率的に比較することもできます。
オブジェクトのシリアル化を使用する前に、「それが課す制限のいくつかを理解することが重要です。」最も重要なのは、オブジェクトをバイトストリームに変換するプロセスを通じて、プライベートとして宣言されたフィールドが公開されることです。 streamストリームの送信中、このデータはキャプチャおよびデコードでき、セキュリティホールが表示されますほとんどの言語では、データのシリアル化形式を外部化できるため、「独自の」エンコードが可能ですこのリスクを軽減するのに役立ちます。
留意すべきもう1つの要因は、シリアル化は、一般に、「シリアル化されたオブジェクトとまったく同じオブジェクトでのみ動作する」ことです。「新しいフィールドまたはメソッドがオブジェクトに追加された場合」オブジェクトの署名が変更されます。これは、保存されたオブジェクトが例外を引き起こし、元の変更されていないオブジェクトのインスタンスが復元を試みるまでデータが回復不能になることを意味します。