vložil Radek Červinka
4. května 2012 00:07
Pokud potřebujeme zapisovat někam data, nebo jen předávat data do jiné části programu, je výhodné používat některý z následníků TStream. Převážná část knihovny Delphi nebo knihoven třetích stran podporuje práci se streamy. Často ale také potřebujeme jen v paměti vytvořit datový proud a ten později zpracovat.
Základní třídou je TMemoryStream. V podstatě představuje data uložená v paměti - jakoby soubor v paměti. Pro operace s ním jsou určité metody, ale přece jen by to chtělo něco čistějšího, zejména pokud pracujeme s textovými daty. Řešením je použití např. TStringWriter, TStreamWriter resp. přímo TStringStream (nebo TStringBuilder) atd.
Pro neunicode Delphi je TStringStream implementován v podstatě jen jako string, což mi přišlo pěkné. V Unicode Delphi se jedná o následníka TBytesStream (resp. TMemoryStream).
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils, classes;
var
ss: TStringStream;
ms: TMemoryStream;
sw: TStringWriter;
swr: TStreamWriter;
begin
sw := TStringWriter.Create;
sw.Write('hello');
sw.Write('world');
writeln(sw.ToString);
sw.Free;
ms:= TMemoryStream.Create;
swr := TStreamWriter.Create(ms);
try
swr.Write('Hello');
swr.Write('World');
writeln(ms.Size);
finally
swr.Free;
ms.Free;
end;
ss := TStringStream.Create;
try
ss.WriteString('Hello world');
writeln(ss.Size);
writeln(ss.DataString);
finally
ss.Free;
end;
end.