Home » Tutorials » Datenspeicherung » Streams

Streams

MemoryStream

Wie bereits in der Einleitung gesagt, bestimmt alleine die Stream-Klasse wohin die Daten tatsächlich geschrieben werden. Indem wir TFileStream durch TMemoryStream austauschen, können wir bewirken, dass unsere Daten nicht in einer Datei, sondern im Hauptspeicher landen.

procedure TFrmMain.BtnSaveClick(Sender: TObject);
var
  Daten: TDatenArray;
  Stream: TStream;
  I: integer;
  Len: LongInt;
begin
  SetLength(Daten, 2);
  Daten[0].ID := 1;
  Daten[0].Name := 'Ein Name';
  Daten[1].ID := 2;
  Daten[1].Name := 'Ein anderer Name';

  Stream := TMemoryStream.Create;
  try
    Len := Length(Daten);
    Stream.Write(Len, SizeOf(Len));

    for I := 0 to Length(Daten) - 1 do
    begin
      Stream.Write(Daten[I].ID, SizeOf(Daten[I].ID));

      Len := Length(Daten[I].Name);
      Stream.Write(Len, SizeOf(Len));
      Stream.Write(PChar(Daten[I].Name)^, Len);
    end;

    // Hier könnten wir z.B. die
    // Daten des MemoryStreams an die Windows-Zwischenablage übergeben

  finally
    Stream.Free;
  end;
end;

Die Methode ist bis auf zwei Stellen identisch mit der Methode, die wir in „Daten in einer Datei speichern“ entwickelt haben.
Hier wird eine Instanz von TMemoryStream erzeugt und nicht eine von TFileStream. Der Kommentar müsste noch durch irgendeinem Code ersetzt werden, der etwas Sinnvolles mit dem Stream anfängt. Nachdem der Stream freigegeben wurde, sind alle Daten weg.