Справочник по компонентам Delphi. Часть 1
Страница 5. Класс TStream


Класс TStream

Класс TStream не нов для библиотек фирмы Borland; он и его потомки на­зываются потоками. Со времен появления в библиотеке Turbo Vision он не претерпел существенных изменений, но теперь потоки стали обязательными составными частями там, где нужно прочитать или передать во внешний источник какую-либо информацию.

TStream "является абстрактной моделью совокупности данных, обладающей двумя свойствами — длиной Size и положением текущего элемента Position:

property Position: Longint;
(Ro) property Size: Longint;

От TStream порождены дочерние объекты, позволяющие пользоваться мета­форой потока при работе с файлами, блоками памяти и т. п. Так, в модуле CLASSES описаны классы TMemoryStream и TFileStream.

Данные потока можно читать или записывать, используя предоставляемый буфер, или копировать из другого потока. Эта возможность реализована ме­тодами:

function Read(var Buffer; Count: Longint): Longint;
virtual; abstract;
function Writetconst Buffer; Count: Longint): Longint;

virtual; abstract;

Метод
function Seek(0ffset: Longint; Origin: Word): Longint;
virtual; abstract;

позиционирует поток. В зависимости от значения параметра Origin новая позиция выбирается так:

О — новая позиция равна Offset;

1 —текущая позиция смещается на Offset байт;

2 — новая позиция находится на Offset байт от конца потока.

Методы
procedure ReadBuffer(var Buffer; Count: Longint);
procedure WriteBuffer(const Buffer; Count: Longint);

представляют собой оболочки над Read/Write, вызывающие в случае неудачи операции исключительные ситуации EReadError/EWriteError.

Метод
function CopyFromfSource: TStream; Count: Longint): Longint;
дописывает к потоку Count байт из потока Source, начиная с его текущей позиции. Если значение Count равно нулю, то дописывается весь поток Source с его начала.

Основным отличием реализации TStream в VCL является введение ряда мето­дов, обеспечивающих чтение и запись компонентов в потоки. Они полезны на уровне разработчика новых компонентов и здесь подробно не рассматрива­ются:

function ReadComponent(Instance: TComponent): TComponent;
function ReadComponentRes(Instance: TComponent): TComponent;
procedure WriteComponent(Instance: TComponent);
procedure WriteComponentRes (const ResName: string;
Instance: TComponent);
procedure ReadResHeader;
 
 
« Предыдущая статья   Следующая статья »