質問

私は最近、ネットワーク上のバイトデータのシリアル化について同僚と話し合いました。彼はそれを使用しました BinaryFormatter 私が彼に送っていたバイトデータを「非パース」するクラス。これはうまくいきませんでした、そして彼は明らかに持っていました 例外的...例外。 Binaryformatter 私のデータは単なるバイト配列だったため、データを正しく「非パース」することはできませんでした。

彼の動機 BinaryFormatter プラットフォームの独立性でした。私はそのようなスタンスを説得していません。二人とも使用したとき BinaryReader また BinaryWriter, 、コードランドでは物事がうまくいきました。

したがって、何が使用されていますか BinaryFormatter また、ワイヤーの上にバイトを送信する必要がある場合はどこでも、各シナリオで使用することを検討する必要がありますか?

役に立ちましたか?

解決

間違いなく、あなたがあなたのデータを持っているなら byte[], BinaryFormatter 使用する賢明なことではありません。データをワイヤーに書き出すだけです。ただし、オブジェクトのセットがあり、それらをストリームにシリアル化したい場合は、 BinaryFormatter 各タイプの各フィールドを手で手動で書くよりも、はるかに使いやすいです。の目的 BinaryFormatter または、一般的にシリアナー/脱介器スキームは、バイトのシーケンスとしてオブジェクトグラフ(おそらく複雑な)を持続する方法を提供することです。

他のヒント

「プロトコルバッファー」のようなものを見たいと思うかもしれません(それとは異なります BinaryFormatter)は、高性能で低帯域幅です。 ポータブル/クロスプラットフォーム, 、バージョンに耐えるバイナリシリアル化形式(すごい、それは一口です)。

幸いなことに、.NETにはバージョンがあります。 protobuf-net.

(開示:私は著者ですが、それは無料です。私はあなたに何も売ろうとはしていません - あなたに多くの時間と痛みを救うだけです)

BinaryFormatter 非常に...脆いです。それは.NET固有であり、バージョンの許容度が比較的不十分です。私がそれを使用する唯一の時間は、間に通信するための舞台裏です AppDomain同じマシンでs。それ以外の場合は、契約ベースのシリアルザーを見ています。 XmlSerializer, DataContractSerializer, 、またはprotobuf-net。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top