-
12-09-2019 - |
質問
私は最近、ネットワーク上のバイトデータのシリアル化について同僚と話し合いました。彼はそれを使用しました BinaryFormatter
私が彼に送っていたバイトデータを「非パース」するクラス。これはうまくいきませんでした、そして彼は明らかに持っていました 例外的...例外。 Binaryformatter
私のデータは単なるバイト配列だったため、データを正しく「非パース」することはできませんでした。
彼の動機 BinaryFormatter
プラットフォームの独立性でした。私はそのようなスタンスを説得していません。二人とも使用したとき BinaryReader
また BinaryWriter
, 、コードランドでは物事がうまくいきました。
したがって、何が使用されていますか BinaryFormatter
また、ワイヤーの上にバイトを送信する必要がある場合はどこでも、各シナリオで使用することを検討する必要がありますか?
解決
間違いなく、あなたがあなたのデータを持っているなら byte[]
, BinaryFormatter
使用する賢明なことではありません。データをワイヤーに書き出すだけです。ただし、オブジェクトのセットがあり、それらをストリームにシリアル化したい場合は、 BinaryFormatter
各タイプの各フィールドを手で手動で書くよりも、はるかに使いやすいです。の目的 BinaryFormatter
または、一般的にシリアナー/脱介器スキームは、バイトのシーケンスとしてオブジェクトグラフ(おそらく複雑な)を持続する方法を提供することです。
他のヒント
「プロトコルバッファー」のようなものを見たいと思うかもしれません(それとは異なります BinaryFormatter
)は、高性能で低帯域幅です。 ポータブル/クロスプラットフォーム, 、バージョンに耐えるバイナリシリアル化形式(すごい、それは一口です)。
幸いなことに、.NETにはバージョンがあります。 protobuf-net.
(開示:私は著者ですが、それは無料です。私はあなたに何も売ろうとはしていません - あなたに多くの時間と痛みを救うだけです)
BinaryFormatter
非常に...脆いです。それは.NET固有であり、バージョンの許容度が比較的不十分です。私がそれを使用する唯一の時間は、間に通信するための舞台裏です AppDomain
同じマシンでs。それ以外の場合は、契約ベースのシリアルザーを見ています。 XmlSerializer
, DataContractSerializer
, 、またはprotobuf-net。