シリアライゼーションとは何ですか?


149

私はオブジェクト指向プログラミング(OOP)を使い始めています。知りたいのですが、OOP用語でのシリアル化の意味は何ですか?


また、シリアル化コード
KB / dotnet /

4
その記事は完全なBSなので、その評価です。
RedAces 2014年

グーグルでの検索は即座に答えを出すので、それは通常取り除かれている種類の広すぎる質問ではないですか?
arvymetal 2018

2
@arvymetal正解でした。これは私が
ググった

回答:


143

シリアライゼーションとは、メモリ内のオブジェクトをバイトストリームに変換して、ディスクに格納したり、ネットワーク経由で送信したりできるようにするプロセスです。

逆シリアル化は逆のプロセスです。バイトのストリームをメモリ内のオブジェクトに変換します。


46
また、動詞MarshalおよびUnmarshalは、Serializeおよびと同義Deserializeです。
wulfgarpro

4
メモリ内のオブジェクトは、最下位レベルで既にバイトとして表されていませんか?
mahacoder

3
メモリ内のオブジェクトは、コンパイラ、OS、ハードウェアによってフォーマットされます。コンパイラを変更し、フォーマットを変更します。シリアル化されたオブジェクトには、コードによって定義された形式があるため、形式を保証できます。これは、ネットワークを介してオブジェクトを送信する場合にも役立ちます。受信側のマシンのアーキテクチャが完全に異なる可能性があります(したがって、メモリ内での表現)。
Andrew Barnett

1
それを文字列に変えますか?
NoName、

1
文字列は有効な形式にすることができますが、文字列である必要はありません。文字列自体にはさまざまな形式(ASCII、UTF8、UTF16、EBCDIC ...)があり、実際にコンセプトをかなりよく示しています。文字列(メモリ内オブジェクト)abcは、0x61 0x62 0x63(ASCII)または0x00 0x61 0x00 0x62 0x00 0x63(UTF16)としてシリアル化されます-NULターミネーターやエンコードされた長さなどの有無にかかわらず。
Andrew Barnett

91

簡単に言うと、シリアライゼーションは、オブジェクトをバイトストリームに変換して、ネットワーク経由で転送したり、永続的なストレージに保存したりするプロセスです。

逆シリアル化は正反対です。ネットワークまたは永続ストレージからバイトストリームをフェッチし、同じ状態のオブジェクトに変換し直します。

理解すべきことは、これらのバイトストリームがどのように解釈または操作され、まったく同じオブジェクト/同じ状態が得られるかです。それを達成するためのさまざまな方法があります。それらのいくつかは-

  1. XML:オブジェクトをXMLに変換し、ネットワーク経由で転送するか、file / dbに保存します。それを取得して、同じ状態のオブジェクトに戻します。Javaでは、JAXB(XMLバインディング用のJavaアーキテクチャー)ライブラリーを使用します(Java 6以降、JDKにバンドルされています)。
  2. JSON:オブジェクトをJSON(JavaScriptオブジェクト表記)に変換することで同じことができます。この場合も使用できるGSONライブラリがあります。
  3. または、OOP言語自体によって提供されるシリアル化を使用できます。たとえば、Javaでは、オブジェクトをシリアライズして実装しSerializable interface、オブジェクトストリームに書き込むことができます。

@AniketThakur非常に良い説明です。JSON私はそれについて何も知らないので、ゼロから学ぶためのリンクを提供してもらえますか
Kasun Siyambalapitiya '22

シリアル化について話すときはいつでも、常にオブジェクトのみを参照するのです。ファイルを使用してネットワーク経由で転送するのではなく、オブジェクトを持たない関数型言語でシリアル化を使用することはできません。
Pardeep Sharma

1
まず、オブジェクトをバイトのストリームに変換して戻す必要があるのはなぜですか?なぜそれを行おうとしているユーザーのための暗黙の操作ではないのですか?
Aparna Chaganti

1
JSONまたはXMLを使用できる場合、なぜそれらをストリームのバイトに変換する必要がある、またはそれを言う必要があるのでしょうか。そして、それらをバイトに変換するのではなく、JSOnまたはXMLにのみ格納します。
ムハンマドファイザン

78

画像による簡単な説明:

私の犬、レックスが連載されています!

類推による説明:

私は電話で私の友達に話していると私は彼に私の新しい子犬について話していると仮定します。

ここに私の問題があります:子犬は生きて呼吸する哺乳類です。子犬を電話回線で伝えるにはどうすればよいですか?子犬を受話器に物理的に入れることができません。

代わりに、子犬の表現を電話で伝える必要があります。つまり、犬のレックスをシリアル化し、シリアル化されたバージョンのレックスを電話で送ります。

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

それは完璧な表現です-私の犬の連載。

概要:

シリアライゼーションとは、基本的に、犬のRexを別の何か(JSONオブジェクト)に変換することを意味し、電話線を介して1と0のシリーズとして転送できます。ニューヨークの私の仲間は、それらの1と0をJSONオブジェクトに変換して戻すことができるので、彼は私の犬のレックスを完全に表現しています。


16

これをチェックしてください、これはあなたに良い説明を与えるでしょう:

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

シリアル化という用語の最も一般的な使用法は、バイナリオブジェクトをXML(またはその他の文字列)表現に変換して、データベース/ファイルに格納したり、Webサービス呼び出しでネットワーク経由で送信したりすることに関係していると思います。逆シリアル化は逆のプロセスです-XML /文字列をオブジェクトに変換します。

編集:あなたが遭遇するかもしれない別の用語はマーシャリング/アンマーシャリングです。マーシャリングは基本的にシリアライズと同じ概念であり、アンマーシャリングはデシリアライズと同じです。


3
必ずしもXMLだけでなく、バ​​イナリ表現でも可能です
Matthew Farwell

7

シリアライゼーションは、オブジェクトをバイトストリーム変換して、オブジェクトを保存または送信するプロセスです。、メモリ、データベース、またはファイルにしたりするプロセスです。その主な目的は、オブジェクトの状態を保存して、必要なときにオブジェクトを再作成できるようにすることです。逆のプロセスは、逆シリアル化と呼ばれます。

...

この図は、シリアル化の全体的なプロセスを示しています

シリアル化の全体的なプロセス

...

開発者はシリアライゼーションを通じて、Webサービスを介してオブジェクトをリモートアプリケーションに送信する、オブジェクトをあるドメインから別のドメインに渡す、ファイアウォールを介してXML文字列として渡す、セキュリティやユーザー固有のメンテナンスを行うなどのアクションを実行できます。アプリケーション全体の情報

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/から

(強調鉱山)


5

シリアライゼーションは、順序付けされていないデータ(オブジェクトなど)を一連のトークンに変換するプロセスであり、後で元のデータを再構築するために使用できます。シリアル化された形式は、ほとんどの場合テキストの文字列ですが、そうである必要はありません。


2

シリアライゼーションとは、オブジェクトを保存可能なビットシーケンスに変換することです。

このシーケンスをファイル、db、またはネットワーク経由で保存できます。

後で実際のオブジェクトに逆シリアル化して、いつでも再利用できます。

WebサービスAJAXは、シリアル化の最も一般的な例です。クライアントに応答を送信する前にシリアル化されたオブジェクト。


1

シリアル化は、Javaでサポートされているオブジェクトをファイルでサポートされている形式に転送することに他なりません

                         (OR)

Javaがサポートするフォームをネットワークがサポートするフォームに変換します。シリアル化の主なスコープは、あるレイヤーから別のレイヤーにデータを転送することだけです。ネットワーク経由で送信できるシリアル化されたオブジェクトのみです。


1

シリアライゼーションは、Java、C#、またはその他(OOP言語)でサポートされているオブジェクトを転送可能な形式に変換するプロセスです。これにより、ネットワーク経由で転送したり、ディスクに保存したりできます。クラスを直列化可能にするには、直列化可能インターフェースを実装する必要があります。


JavaやC#だけでなく、ほとんどのプログラミング言語でシリアル化を使用しています。たとえば、Pythonのpickleモジュールで同じものが使用されます。
Pardeep Sharma

0

シリアライゼーションは、データをバイトの線形「文字列」に変換します。

他の人も多かれ少なかれ同じことを言っていますが、コンピューターモデルでは、データが1次元でアドレス指定されたRAMまたは永続ストレージに収まる必要があることを強調します。

「データ」であるほとんどのものが本質的にシリアル化可能です(たとえ抽象モデルを線形モデルに削減する必要がある場合でも)。シリアル化できないのは、ネットワーク接続や、パーサーのような複雑な状態ベースのマシンです。


0

シリアライゼーションは、バイナリオブジェクトをXML(または他の文字列)表現に変換して、データベース/ファイルに保存したり、Webサービス呼び出しでネットワーク経由で送信したりする必要があります。逆シリアル化は逆のプロセスです-XML /文字列をオブジェクトに変換します。


0

クラス(青写真)から実際のオブジェクト(モノ)をインスタンス化(構築)するときは、オブジェクト(モノ)をシリアル化(基本的な原子構造に分解)してメモリ内のスペースに保存する必要があります。(スタートレックトランスポーターのようなもの)。どこかに輸送して保存できる情報の流れに分解します。次に、事物を再構築する場合は、アトミックに格納されたインスタンスをオブジェクトに戻します。インスタンス化とは異なります。


0

シリアル化とは、オブジェクトをバイナリデータストリームに変換して、ファイルに保存したり、ネットワークを介して送信したりして、同じオブジェクトに復元できるようにするプロセスです。

このドキュメントは、Javaシリアライゼーションを詳細に理解するのに役立ちます。


-1

シリアル化とは、オブジェクト(メモリのチャンク)がオブジェクトの状態を(例として)ファイルに保存できる形式に変換されるときです。

Cookieを作成するように扱ってください-オブジェクトは生地、Cookieはシリアル化された生地です。

したがって、「シリアライズ」することで、あなたの友達にクッキーを送ることができます。

そんな感じ :-)


4
...ただし、クッキーを生地に戻すことはできません(デシリアライズ)。
Dave Sherohman、2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.