Domanda

Di recente ho discusso con un collega sulla serializzazione dei dati di byte su una rete. Ha usato il BinaryFormatter Classe per "Unconing" i dati di byte che gli stavo inviando. Questo non funzionava e ovviamente aveva eccezionale... eccezioni. Binaryformatter Non potevo "imparziale" i dati correttamente poiché i miei dati erano semplicemente un array di byte.

La sua motivazione per BinaryFormatter era l'indipendenza della piattaforma. Non sono convinto di tale posizione. Quando entrambi abbiamo usato BinaryReader o BinaryWriter, le cose hanno funzionato bene in Code Land.

A cosa serve quindi BinaryFormatter E dovrei guardare a usarlo in ogni scenario ovunque devo inviare byte sul filo?

È stato utile?

Soluzione

Sicuramente, se hai i tuoi dati come byte[], BinaryFormatter non è una cosa saggia da usare. Scrivi i dati sul filo. Tuttavia, se si dispone di una serie di oggetti e si desidera serializzarli in un flusso, BinaryFormatter è molto più facile da usare che scrivere manualmente ogni campo di ogni tipo a mano. Lo scopo di BinaryFormatter o qualsiasi schema serializzatore/deserializzatore in generale è quello di fornire un modo per persistere a un grafico degli oggetti (possibilmente complesso) come sequenza di byte.

Altri suggerimenti

Mi sembra che potresti voler guardare qualcosa come "buffer protocol", che (a differenza di BinaryFormatter) è una larghezza ad alte prestazioni, a bassa banda, portatile/multipiattaforma, Formato di serializzazione binaria tollerante alla versione (wow, questo è un boccone).

Fortunatamente, ci sono versioni in .NET, come protobuf-net.

(Divulgazione: sono l'autore, ma è gratuito; non sto cercando di venderti nulla - ti salva un sacco di tempo e dolore)

BinaryFormatter è molto ... fragile; È specifico .NET e ha una tolleranza alla versione relativamente scarsa. L'unica volta che lo uso è dietro le quinte per comunicare tra AppDomainS sulla stessa macchina. Altrimenti, esaminerei i serializzatori basati su contratti, come XmlSerializer, DataContractSerializer, o protobuf-net.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top