2016-07-27 11 views
2

GoのJSONパッケージでは、marshaldecodeなどの機能があることがわかりました。JSONのマーシャル/アンマーシャル、エンコーディング/デコード、シリアル化/デシリアライゼーションの関係と相違点は?

私はdecodemarshalの反対であると思っていましたが、後者は私が間違っている可能性があることを認識しました。

は私が持っている根本的な問題があると思う:

JSONのためのマーシャル/アンマーシャリング、エンコード/デコード、およびシリアライズ/デシリアライゼーションの間の関係との違いは何ですか?

ありがとうございました。

ここWhy are json package's Decode and Marshal methods used here?

+0

@ Timなぜ* *答えを選んでいないのですか?まだ満足していない? – xpt

答えて

2

を例を参照してください、私は個人的にすべてのこれらの用語は、エンコーディング/デコーディングととても少ないものの、同義語であると言うでしょう。 GoでMarshalとUnmarshalは、jsonを文字列形式でオブジェクトに変換する、またはその逆を記述するために使用される用語です。しかし、C#では、これらの同じメソッドはシリアル化とデシリアライズと呼ばれています。ただし、用語が全くない(少なくとも標準ライブラリにはない)ことがわかっている限りです。

エンコードは、いくつかのデータが格納される形式を記述するための形容詞として使用できます。最も一般的な使用法はおそらく文字エンコード(UTF-8)です。 Goでは、jsonを非整列化/整列化できるオブジェクトを記述するために、名詞としても使用されています。 Marshal/Unmarshalは常に動詞として使用され、あなたはjsonでそのアクションを行います。

エンコーディングは、あるエンコーディングから別のエンコーディングへの変換を扱うより大きなカテゴリのパッケージを参照するためにも使用されます。

オブジェクトまたはjsonをマーシャリング、マーシャリング、デシリアライズまたはシリアライズしていたとお伝えした場合、私はあなたが意味するものを正確に理解しています。あなたがオブジェクトをエンコードしていると言ったら、私は明確な質問をします。 「応答はjson符号化されている」と言えば、「応答はjson」というよりむしろそれらの言葉を使用するのが奇妙だとは思うが、私はあなたが意味するものを得るだろう。あなたが探している情報の多かれ少なかれであることを願っています。

ああも、単により明確にするため

encoding/jsonパッケージでMarshal == serialize == encode

+0

ありがとうございます。ここの例を見てください。http://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim

+0

@Tim分。 – evanmcdonnal

2

Unmarshal == deserialize == decodeMarshal機能と逆Unmarshal関数の戻り値および単一の固定バイトスライスを操作します。単一のオブジェクトをバイトに変換し、その逆もあります。

EncoderDecoderタイプもあります。これらはEncodeDecodeのメソッドを含み、それぞれio.Readerio.Writerをとるバイトストリームで動作します。また、複数のオブジェクトを、それらのストリームを使用する改行デリミタでシリアル化またはデシリアライズすることもできます。

Marshal/Unmarshal関数とEncoder/Decoderの基本的なメカニズムは同じですが、両方とも同じ内部encodeState.marshaldecodeState.unmarshalのコードパスを使用します。唯一の違いは、さまざまな使用パターンに対して代替アクセスを提供することです。

+0

ありがとうございます。ここの例を見てくださいhttp://stackoverflow.com/questions/38620151/why-are-json-packages-decode-and-marshal-methods-used-here – Tim