TOC

This article is currently in the process of being translated into Spanish (~99% done).

Data Streams:

MemoryStream

La clase MemoryStram es una de las clases básicas de Stream la cual verá ser usada mucho. Esta trabaja con datos directamente en memoria, como el nombre lo implica y es a menudo usada para lidiar con bytes viniendo de otros lugares, por ejemplo un archivo o una ubicación de red, sin bloquear la fuente.

Por ejemplo, usted puede leer el contenido entero de un archivo en un MemoryStream, el cual bloquea y desbloquea el archivo inmediatamente, y luego empezar a trabajar en los bytes en un MemoryStream. Si necesita hacer muchas reubicaciones atrás o adelante en los bytes es también mucho más rápido que hacer lo mismo directamente en por ejemplo un FileStream por que los bytes en un MemoryStream están almacenados en memoria en vez de en el disco.

Por lo tanto, a menudo verá un MemoryStream inicializado con un arreglo de bytes (byte[]) viniendo de otra fuente, y a menudo, verá al MemoryStream instanciado siendo pasado a otro mecanismo el cual utilice el MemoryStream, por ejemplo, uno de los tipos StreamReader. Aquí está un ejemplo:

public void UseMemoryStream()
{
	byte[] fileContents = File.ReadAllBytes("test.txt");
	using(MemoryStream memoryStream = new MemoryStream(fileContents))
	{
		using(TextReader textReader = new StreamReader(memoryStream))
		{
			string line;
			while((line = textReader.ReadLine()) != null)
				Console.WriteLine(line);
		}
	}
}

En este ejemplo, leemos todos los bytes en un archivo de texto simple. Luego creamos un MemoryStream con estos bytes y entonces creamos una instancia de StreamReader la cual leerá todas las líneas desde el MemoryStream. Como este ejemplo ilustra, el MemoryStream es una bonita fuente de respaldo de otra clase la cual hará el trabajo, en este caso el StreamReader.

Usando las clases StreamReader/StreamWriter es un buen atajo para trabajar con el Stream subyacente, pero si usted insiste, puede leer los bytes directamente del MemoryStream y trabajar con ellos. La clase MemoryStream viene con varios métodos para esto, por ejemplo, el método ReadByte(). Este leerá el byte en la posición actual, lo retornará y entonces avanzará la propiedad Position, preparando al MemoryStream para leer el siguiente byte. Aquí está un ejemplo:

public void UseMemoryStream()
{
	byte[] fileContents = File.ReadAllBytes("test.txt");
	using(MemoryStream memoryStream = new MemoryStream(fileContents))
	{
		int b;
		while((b = memoryStream.ReadByte()) >= 0)
			Console.WriteLine(Convert.ToChar(b));
	}
}

Este leerá cada byte encontrado en el MemoryStream y lo escribirá en la Consola. Note que uso el método Convert.ToChar() para convertir el byte en un caracter ASCII, ya que sé que la fuente es pero texto.

Resumen

La clase MemoryStream puede ser usada como una fuente de respaldo de datos que quiera mantener en memoria. Esto lo convierte en una almacen temporal genial para datos provenientes de un archivo o un recurso de red, para prevenir bloqueos, etc. mientras usted trabaja con los datos.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!