Serializzazione byte
-
12-09-2019 - |
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?
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 AppDomain
S sulla stessa macchina. Altrimenti, esaminerei i serializzatori basati su contratti, come XmlSerializer
, DataContractSerializer
, o protobuf-net.