2009-08-20 13 views

答えて

26

通常、オブジェクトがランダムアクセス、つまりある(Javaでは、あなたはSerializableインタフェースを実装してはいけません)オブジェクト(プロパティまたはフィールド)の任意の部分を指定し、その部分に直接アクセスできます。 RAMがR andom A cess M emoryのように、オブジェクトを格納するためにRAMを使用しているなら、それはすべてうまくいけます。

あなたは伝統的にランダムアクセスではない培地上で、あなたのオブジェクトを格納する必要があり、例えばディスク、またはあなたが(ネットワークなど)ストリーム媒体上でオブジェクトを転送する必要がある、オブジェクトのニーズ関連する媒体に適した形式に変換することができます。この変換プロセスはシリアライズと呼ばれます。これは、構造化オブジェクトがフラット化またはシリアル化され、長期間保存しやすくなるか、ネットワーク経由で転送されるためです。

RAM内のオブジェクトを構成するビットをディスクにコピーするだけでなく、ネットワーク上で不透明なブロブとして送信するのはなぜですか? ...あなたは尋ねるかもしれません。いくつかの問題:

  1. 多くの場合、オブジェクトがメモリに保存されているフォーマットは、公共の消費のための独自のため、適切ではない - それはメモリに格納される方法は、インメモリの使用に最適化されています。
  2. オブジェクトが他のオブジェクトを参照する場合、それらの参照は、実行中のアプリケーションのコンテキスト内でのみ意味を持ちます。シリアライゼーション処理中にオブジェクトグラフをウォークしてそれに応じてシリアライズしない限り、意味のあるオブジェクトの逆シリアル化はできません。これらの参照を、アプリケーションインスタンスのコンテキストの外側にある意味がの形式に変換する必要があるかもしれません。
  3. 異種システム間の相互運用要件があります。この場合、オブジェクトを表す標準的な手段が必要です(通常、これにはいくつかの形式のXMLが選択されます)。
+0

初心者では、私はあなたがより良い答えを与えることができなかったと思います。 –

6

ビットに変換され、ハードドライブなどの媒体に格納されるオブジェクト。

http://en.wikipedia.org/wiki/Serialization
+0

シリアル化できないオブジェクトの例を挙げることができますか? – Frank

+1

技術的には、いくつかの言語構成または方法論によってシリアル化されていないオブジェクトはすべて直列化できません。通常は直列化しないオブジェクトの例が必要な場合、一般的な考え方は「必要としない/保存したいもの」です。 MVCデザインパターンでは、コントローラーが何をすべきかを指示する必要があるため(モデルとコントローラーをシリアル化するため)、通常はビューをシリアル化しません。 – Cinder6

+2

_not_ serialisableの例として、同じ環境を持たないマシン上で再構築することは、不可能ではないにしても非常に困難なものを考えてください。 たとえば、ResultSetsはデータベースに接続を保持できるため、直列化できません。 –

1

それがとにかく.NETで、バイナリ、SOAP、XMLに変換することができることを意味しており、C#で[シリアライズ]などのオブジェクトをマークすることができます。

この美しさは、オブジェクトをインターネット、ネットワークなどを介して送信し、もう一方のオブジェクトとして再び復元するオブジェクトをシリアル化できることです。これは、反対側のコンピュータがデータを読み込み、それをデシリアライズできる限り、Windowsマシンなどのマシン境界をUnixマシンに渡すことができます。

この記事を参照してください: それはに後で非直列化することができるように(ディスクへの保存など)「saveable」形式にオブジェクトの状態を保存するために、一般的な手段でシリアル化http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=236

1

実際のオブジェクト。リモートコールの場合には、ネットワーク経由でオブジェクトを送信することも通常行われます。あなたが保存したくないとあなたがワイヤ上でオブジェクトを送信したくない場合にも、あなたがシリアライズ可能な部分を無視することができる場合は、

3

オブジェクトのシリアル化によってインスタンスの状態が保存されるため、後でインスタンスを再構築できます。

ほとんどの場合(C#とJava)、直列化可能なオブジェクトは「マークされています」。 Javaでは、Serializableを実装する必要があります。 C#では、[Serializable]を使用する必要があります。

オブジェクトがシリアル化されたら、ファイルに保存するか、ネットワーク経由で送信できます。

インスタンスのすべてのインスタンス変数を通り、その値をセパレータで区切って保存するようにしてください(それよりもはるかに洗練されていますが、インスタンス変数がプリミティブでない場合、それらの中にすべての値を格納する必要もあります)。

これを使用すると、ゲームを節約できます。

1

シリアライゼーション:オブジェクトをバイナリ形式、簡単なオブジェクトアクセスプロトコル(SOAP)、またはxmlドキュメントに変換して、簡単に格納、転送、取得できる手法。

シンプルな方法で、データを圧縮して解凍し、安全な方法でネットワーク経由でデータを転送できる方法です。

オブジェクトのシリアル化は、ljuwaidahが説明したものです。私はそれがデータのシリアライズを言及することが重要だと思う、と言われているもののほかにも link text

1

このリンクを試してみてくださいすることは、それを明確に定義されを与える意味 (シリアルが並んで何かを持つことを意味する、シリーズから来ていますまたはの行)。

例えば、グラフ(例えば、「セマンティックウェブ」から知られているRDFグラフ)をXMLなどのシリアライズフォーマットにシリアル化するということは、グラフに含まれる情報をどのようにして逆シリアル化規則を適用することによって後で再構成することができます(デシリアライズ)。

0

Javaはプラットフォームに依存せず、セキュリティ目的のために開発されたため、すべてのことがビット形式で可能です。例えば、ユーザーはアルファベットをよく理解していますが、そのアルファベットのビットを覚えておくことは難しいでしょうし、そのJava言語の文字列で言うこともできます。 したがって、ネットワークにセキュリティを提供するために、オブジェクトを使用します。 メッセージが損失結合されているため、セキュリティを提供するために、オブジェクトを使用してサーバーまたはクライアントからメッセージを送受信します。したがって、オブジェクトを使用しているとき、オブジェクトは直列化可能でなければなりません。これは、マシンが簡単に理解できるビットの形式でなければならないことを意味します。 特に、メッセージを送受信するためには、JMS(Java Message Service)が使用されています。たとえば、インドにある1台のコンピュータが、その時点で米国にある別のコンピュータと通信したい場合があり、JMSサービスが使用されます。

要するに、シリアル化とは、文字列をビットに変換することを意味します。

これを使用することで、メールを送信するなどのJavaプログラムを作成し、SMTP(Simple Mail Transfer Protocol)プロトコルに基づくメールアプリケーションのように受信することができます。

+0

質問がC#に関するときにJavaについてのあなたの答えは何ですか? –

関連する問題