Question

J'ai récemment eu une discussion avec un collègue sur la sérialisation des données d'octets sur un réseau. Il a utilisé le BinaryFormatter Classe pour "non évalué" les données d'octets que je lui envoyais. Cela n'a pas fonctionné et il avait évidemment exceptionnel... exceptions. Binaryformatter Je ne pouvais pas «inadapter» les données correctement car mes données étaient simplement un tableau d'octets.

Sa motivation pour BinaryFormatter était l'indépendance de la plate-forme. Je ne suis pas persuadé d'une telle position. Quand nous avons tous les deux utilisé BinaryReader ou BinaryWriter, Les choses ont bien fonctionné dans le terrain de code.

À quoi sert donc de BinaryFormatter Et dois-je regarder l'utiliser dans chaque scénario où que j'aie besoin d'envoyer des octets sur le fil?

Était-ce utile?

La solution

Certainement, si vous avez vos données comme byte[], BinaryFormatter n'est pas une chose sage à utiliser. Vous écrivez simplement les données sur le fil. Cependant, si vous avez un ensemble d'objets et que vous souhaitez les sérialiser dans un flux, BinaryFormatter est beaucoup plus facile à utiliser que d'écrire manuellement chaque champ de chaque type à la main. Le but de BinaryFormatter ou tout schéma de sérialiseur / désérialiseur en général consiste à fournir un moyen de persister un graphique d'objet (peut-être complexe) comme séquence d'octets.

Autres conseils

Il me semble que vous voudrez peut-être regarder quelque chose comme des "tampons de protocole", qui (contrairement BinaryFormatter) est une largeurment haute performance et basse, portable / multiplateforme, Format de sérialisation binaire tolérant à la version (wow, c'est une bouchée).

Heureusement, il existe des versions dans .NET, comme protobuf-net.

(Divulgation: je suis l'auteur, mais c'est gratuit; je n'essaie pas de vous vendre quoi que ce soit - vous sauvez juste beaucoup de temps et de douleur)

BinaryFormatter est très ... cassant; Il est spécifique au .NET et a une tolérance de version relativement mauvaise. La seule fois où je l'utilise est dans les coulisses pour communiquer entre AppDomains sur la même machine. Sinon, je examinerais les sérialiseurs contractuels, tels que XmlSerializer, DataContractSerializer, ou protobuf-net.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top