Skip to content

TMemoryStream, manejo de memoria en Delphi

TMemoryStream es una secuencia que almacena datos dentro de la memoria dinámica de un dispositivo.

TMemoryStream es un objeto o clase que desciende o hereda de la clase TStream, que se utiliza para poder leer y escribir datos en memoria.

En esta clase se agrega una propiedad llamada Memory, que es de tipo puntero que da acceso directo a la porción de memoria reservada por MemoryStream, entre otras propiedades y métodos para poder administrar un búfer de memoria dinámica.

Los flujos de memoria, en programación, son útiles como objetos intermedios que pueden contener cualquier tipo de información, y poder leerla o escribirla en cualquier otro medio de almacenamiento del dispositivo. 

A su vez, proporciona un formato útil para comparar el contenido de las transmisiones o para manipular datos almacenados en un medio menos accesible.

Ejemplo de TMemoryStream

var
  vMemoryStream: TMemoryStream;

...

procedure cargararchivoaMemoria;
begin
  vMemoryStream := TMemoryStream.Create;
  try
    LoadFromFileToMem('X:\File.dat', vMemoryStream);  
  finally
    memStream.Free;
  end;
end;

procedure LoadFromFileToMem(const vFile: string; vMemoryStream: TMemoryStream);
var 
  vFileStream: TFileStream;
begin
  vFileStream := TFileStream.Create(vFile, fmOpenRead);
  try
    vMemoryStream.CopyFrom(vFileStream);
  finally
    vFileStream.Free;
  end;
end;

Este ejemplo de TMemoryStream es uno de los más sencillos de entender.

En primer lugar creamos una variable llamada vMemoryStream de tipo TMemoryStream en un ámbito global.

Luego le cargamos el archivo ‘X:\File.dat’ a través del procedimiento LoadFromFileToMem, el cual recibe dos parámetros, el primero es el nombre del archivo a cargar, y el segundo es el objeto de tipo TMemoryStream en el cual se cargará el archivo anterior.

A este ejemplo le podríamos agregar una comprobación para verificar si el archivo existe y no tener una exception si el mismo no se encuentra, pero para comenzar a practicar el uso de TMemoryStream basta con ser sencillo.