ejemplo crear convert array archivo .net memorystream

crear - Restablecer o borrar.NET MemoryStream



memorystream to string (3)

¿Por qué es necesario reiniciar la secuencia de la memoria? Siempre puedes crear uno nuevo. O puede usar:

memoryStream.SetLength(0);

.NET MemoryStream no parece tener un método .Reset o .Clear.

Estaba pensando en usar el siguiente código para lograr esto:

ms.Seek(0, IO.SeekOrigin.Begin) ms.SetLength(0)

¿Cuál es la forma correcta de borrar o restablecer un .NET MemoryStream existente?


Como un MemoryStream es esencialmente un conjunto de bytes con un índice (y algunos otros miembros de soporte), borrar el conjunto de bytes y restablecer el índice se puede considerar restablecer y borrar el MemoryStream. Si el estado inicial de un MemoryStream es una matriz puesta a cero con una posición de cero, entonces un ejemplo de reinicio de MemoryStream puede ser:

public static void Clear(this MemoryStream source) { byte[] buffer = source.GetBuffer(); Array.Clear(buffer, 0, buffer.Length); source.Position = 0; source.SetLength(0); }

Es incorrecto decir que MemoryStream.SetLength solo restablece o borra el MemoryStream ya que SetLength solo borra el conjunto de búfer interno si la longitud excede la longitud del búfer actual.

Reiniciar un MemoryStream es un enfoque válido pero menos eficiente. Un beneficio de reiniciar el MemoryStream sería garantizar que el flujo nunca se cerró. Una vez que MemoryStream está cerrado, ya no se puede cambiar. Si puede asegurarse de que la instancia de MemoryStream no se cierre, borrar el buffer puede ser el camino a seguir.


El flujo de memoria no tiene un método de reinicio / borrado porque sería redundante. Al configurarlo a cero, lo borra.

Por supuesto que siempre puedes hacer:

memoryStream = new MemoryStream(memoryStream.Capacity());

Esto le generará una corriente de memoria del mismo tamaño que se inicializa.

Si realmente quieres borrar manualmente la secuencia, sospecho que tendrías que recurrir a recorrer los elementos.