Содержание материала

 

 

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

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

 

property Position: Longint;

 

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;


 

Code:

{These are three utility functions to write strings to a TStream.

Nothing fancy, but I just ended up coding this repeatedly so

I made these functions. }

В 

unit ClassUtils;

В 

interface

В 

uses

SysUtils,

Classes;

В 

{: Write a string to the stream

@param Stream is the TStream to write to.

@param s is the string to write

@returns the number of bytes written. }

function Writestring(_Stream: TStream; const _s: string): Integer;

В 

{: Write a string to the stream appending CRLF

@param Stream is the TStream to write to.

@param s is the string to write

@returns the number of bytes written. }

function WritestringLn(_Stream: TStream; const _s: string): Integer;

В 

{: Write formatted data to the stream appending CRLF

@param Stream is the TStream to write to.

@param Format is a format string as used in sysutils.format

@param Args is an array of const as used in sysutils.format

@returns the number of bytes written. }

function WriteFmtLn(_Stream: TStream; const _Format: string;

_Args: array of const): Integer;

В 

implementation

В 

function Writestring(_Stream: TStream; const _s: string): Integer;

begin

Result := _Stream.Write(PChar(_s)^, Length(_s));

end;

В 

function WritestringLn(_Stream: TStream; const _s: string): Integer;

begin

Result := Writestring(_Stream, _s);

Result := Result + Writestring(_Stream, #13#10);

end;

В 

function WriteFmtLn(_Stream: TStream; const _Format: string;

_Args: array of const): Integer;

begin

Result := WritestringLn(_Stream, Format(_Format, _Args));

end;

 

Новые статьи

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить