Actualmente estoy trabajando en un servidor de socket y me preguntaba ¿Por qué a los serializadores les gusta
¿Todos requieren unStream en lugar de una matriz de bytes?
Significa que puede transmitir a destinos arbitrarios en lugar de solo a la memoria.
Si desea escribir algo en un archivo, ¿por qué querría crear primero una copia completa en la memoria? En algunos casos, eso podría hacer que use mucha memoria adicional, lo que posiblemente provoque una falla.
Si desea crear una matriz de bytes, simplemente use un MemoryStream :
var memoryStream = new MemoryStream(); serializer.Write(foo, memoryStream); // Or whatever you're using var bytes = memoryStream.ToArray();Entonces, con una abstracción de "usa flujos", puede trabajar fácilmente con la memoria, pero si la abstracción es "usa una matriz de bytes", se ve obligado a trabajar con la memoria incluso si no quiere.
Puede hacer fácilmente una transmisión sobre una matriz de bytes... pero una matriz de bytes está inherentemente restringida en tamaño, donde una transmisión es abierta... tan grande como lo necesite. Algunas serializaciones pueden ser bastante enormes.
Editar : Además, si necesito implementar algún tipo de serialización, quiero hacerlo para la abstracción más básica y evitar tener que hacerlo en múltiples abstracciones. Stream sería mi elección, ya que hay implementaciones de flujo sobre muchas cosas: memoria, disco, red, etc. Como implementador, los obtengo "gratis".
si usa una byte array/ buffer , está trabajando temporalmente en la memoria y tiene un tamaño limitado
Si bien una transmisión es algo que le permite almacenar cosas en el disco, enviarlas a otras computadoras, como Internet, puerto serie, etc., las transmisiones a menudo usan búferes para optimizar la velocidad de transmisión.
Por lo tanto, la transmisión será útil si se trata de un archivo grande.