シリアライゼーションがオブジェクトをバイトコードに変換する方法であることは知っていますが、このメカニズムの目的は何ですか? たとえば、ゲームの状態を保存するために使用できますか? (マップ、プレイヤーなどのオブジェクトをシリアライズすることにより)
5 に答える
ここに4つの理由があります。
同じコードを実行している 2 台のマシンがあり、それらが通信する必要がある場合、簡単な方法は、一方のマシンが送信したい情報を含むオブジェクトを構築し、そのオブジェクトをもう一方のマシンにシリアル化することです。これはコミュニケーションに最適な方法ではありませんが、仕事は完了します。
特定の操作の状態をデータベースに保存する場合は、簡単にバイト配列にシリアル化して、後で取得できるようにデータベースに保存できます。
オブジェクトの正確なレプリカが必要で、独自の特殊化された clone() クラスを作成する手間をかけたくない場合は、オブジェクトをバイト配列にシリアル化し、別のオブジェクトに逆シリアル化するだけでこれを実現できます。ゴール。
実際には上記の単なるアプリケーションですが、オブジェクトの構築に 10 分かかる場合がありますが、逆シリアル化には 10 秒しかかかりません。したがって、巨大なオブジェクトをメモリ内に保持するのではなく、シリアル化によってファイルにキャッシュし、後で必要になったときに読み込むようにします。
コンピューター サイエンスでは、データの保存と転送の文脈において、シリアル化とは、データ構造またはオブジェクトの状態を保存可能な形式に変換するプロセスです (たとえば、ファイルまたはメモリ バッファーに保存したり、ネットワーク接続リンクを介して転送したりします)。 )、後で同じまたは別のコンピューター環境で「復活」します。
シリアル化の出力形式は必ずしもバイト配列ではなく、XML、JSON、単純なテキスト、または特定のオブジェクトの状態を完全または部分的に記述できるその他の形式にすることができます。
このプロセスのアプリケーションは無数にあります。
- 保存/読み込み機能は、ほとんどの場合、シリアライゼーションを使用して行われます。
- Web サービスは XML/JSON シリアライゼーションを使用して、コンポーネント間でデータを転送し
ます。 - バイナリ シリアル化は、ネットワークを介してオブジェクト データを転送するために使用できます。
- 元に戻す/やり直し機能は、シリアライゼーション/デシリアライゼーションを使用してオブジェクトの古い状態を保存しますが、他の方法もあります。
基本的に、シリアル化は、状態を後で取得する必要がある単一のデータ オブジェクトを格納するために使用されます。
基本的に、任意のオブジェクトの状態を保存できるため、同一のインスタンス (オブジェクト) を「生き返らせる」ことができます。IE すべてのインスタンス変数が保存されます。そうです、それを使用してプレイヤー、彼の統計、インベントリなどを保存することはすべて、シリアライゼーションの使用の優れた例です。
ただし、オブジェクトをシリアル化すると、シリアル化されたオブジェクトによって参照されるすべてのオブジェクトもシリアル化されることに注意してください。また、これらの参照オブジェクトのいずれかによって参照される他のすべてのオブジェクトもシリアライズされます。などなど。したがって、シリアライゼーションが失敗することなく機能するためには、シリアライズされたオブジェクトに関連付けられる可能性のあるすべてのオブジェクトもシリアライズ可能である必要があります。
また、静的変数は保存されないことに注意してください。さらに、保存したくないインスタンス変数はtransientとしてマークできます。
オブジェクトを永続化または転送できるようにするためです。
http://msdn.microsoft.com/en-us/library/7ay27kt9(v=vs.71).aspx
シリアル化とは、オブジェクトの状態を永続化または転送できる形式に変換するプロセスです。シリアライゼーションの補完は、ストリームをオブジェクトに変換するデシリアライゼーションです。これらのプロセスを組み合わせることで、データを簡単に保存および転送できます。
多くの場合、オブジェクトをシリアル化する必要があります。つまり、後で補充する形式で「保存」したり、ネットワーク経由で送信したりする必要があります。これは、ユーザーの設定、アプリケーションの状態、ドキュメント、サービスに送信されたコマンドなどである可能性があります...
ここにリンクがあります:http://msdn.microsoft.com/fr-fr/library/7ay27kt9.aspx