Delphi.cz

Český portál Delphi

TBinaryReader a TBinaryWriter

V každé nové verzi Delphi přibude pár užitečných tříd, no a kromě jiných je to v Delphi XE implementace TBinaryReader a TBinaryWriter. Je jasné, že se něco podobného dá naprogramovat za odpoledne, ale přesto mne originální implementace potěšila.

Jak názvy napovídají, jedná se o třídy pomáhající s implementací binárního zápisu a čtení to streamu (souboru). Uvedu rovnou nějaký příklad:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;
var
  oReader: TBinaryReader;
  oWriter: TBinaryWriter;
  s: string = 'Temp Text';
  s2: string;
  d: double = 3.5;
begin
  s2 := StringOfChar('A', 400);
  oWriter := TBinaryWriter.Create('test');
  try
    oWriter.Write(s); // string
    oWriter.Write(byte(1)); // byte
    oWriter.Write(True); // boolean
    oWriter.Write(d); // double 8byte
    oWriter.Write(s2); // string
  finally
    oWriter.Free;
  end;

  oReader := TBinaryReader.Create('test');
  try
    writeln(oReader.ReadString);
    writeln(oReader.ReadByte);
    writeln(oReader.ReadBoolean);
    writeln(oReader.ReadDouble);
    writeln(oReader.ReadString);
  finally
    oReader.Free;
  end;
end.

Velmi přímočaré.

Osobně se mi líbí ukládání a načítání stringu, kdy naprosto transparentně je ukládána před řetězec velikost a to celkem efektivně, kdy pro délku do 127 byte (tj. 7 bitů, eliminace problémů s načítáním) je např. použit jen jeden byte atd. Při načítání nemusíte nic řešit, řetězec bude načten správně.

To ale není vše. Navíc se dá v konstruktoru předat kódování pod kterým budou stringy ukládány (nebo načítány). Následující kód uloží text jako UTF8. Kromě uvedené lze v konstruktoru předat stream.

  oWriter := TBinaryWriter.Create('test2', False, TEncoding.UTF8);
  try
    oWriter.Write('Příliš žluťoučký kůň úpěl ďábelské ódy');
  finally
    oWriter.Free;
  end;

Pro doplnění: online dokumentace TBinaryWriter a TBinaryReader.

Datum: 2010-10-15 23:44:00 Tagy: RTL, delphi XE

Novinky v Delphi