Базовые
классы TStream и THandleStream
В основе иерархии классов потоков лежит класс
Tstream. Он обеспечивает выполнение основных операций потока безотносительно к реальному носителю информации. Основными из них являются чтение и запись данных.
Класс Tstream порожден непосредственно от класса
TObject.
Потоки также играют важную роль в чтении/записи компонентов из файлов ресурсов (DFM). Большая группа методов обеспечивает взаимодействие компонента и потока, чтение свойств компонента из ресурса и запись значений свойств в ресурс.
Таблица 9.3. Свойства
и методы класса Tstream
|
|
property Position: Longint;
|
Определяет текущую позицию в потоке
|
|
Определяет размер потока в байтах
|
function CopyFrom( Source: TStream; Count: Longint) : Longint;
|
Копирует из потока Source Count байты, начиная с текущей позиции. Возвращает число скопированных байтов
|
function Read(var Buffer; Count: Longint) : Longint; virtual; abstract;
|
Абстрактный класс, перекрываемый в наследниках. Считывает из потока
Count байты в буфер Buffer. Возвращает число скопированных байтов
|
procedure Read3uffer (var Buffer; Count: Longint) ;
|
Считывает из потока Count байты в буфер
Buffer. Возвращает число скопированных байтов
|
function Seek (Off set: Longint; Origin: Word): Longint; virtual; abstract;
|
Абстрактный класс, перекрываемый в наследниках. Смещает текущую позицию в реальном носителе данных на
Offset байтов в зависимости от условия
Origin (см. ниже)
|
function Write (const Buffer; Count: Longint): Longint; virtual; abstract;
|
Абстрактный класс, перекрываемый в наследниках. Записывает в поток
Count байты из буфера Buffer. Возвращает число скопированных байтов
|
procedure WriteBuffer (const Buffer; Count: Longint);
|
Записывает в поток Count байты из буфера
Buffer. Возвращает число скопированных байтов
|
function ReadComponent (Instance: TComponent): TComponent;
|
Передает данные из потока в компонент instance, заполняя его свойства значениями
|
function ReadComponentRes (Instance: TComponent) : TComponent;
|
Считывает заголовок ресурса компонента Instance и значения его свойств из потока.
|
|
Считывает заголовок ресурса компонента из потока
|
procedure WriteComponent (Instance: TComponent) ;
|
Передает в поток значения свойств компонента
Instance
|
procedure WriteComponentRes (const ResName: string; Instance: TComponent) ;
|
Записывает в поток заголовок ресурса компонента
Instance и значения его свойств
|
Итак, в основе операций считывания и записи данных в потоке лежа! методы
Read и Write. Именно они вызываются для реального выполнения операции внутри методов
ReadBuffer И WriteBuffer,
ReadComponent И WriteComponent. Так как класс TStream
является абстрактным, то методы Read
и write также являются абстрактными. В классах-наследниках они перекрываются, обеспечивая работу с конкретным физическим носителем данных.
Метод Seek используется для изменения текущей позиции в потоке. "Точка отсчета" позиции зависит от значения параметра
Origin:
- soFromBeginning
— смещение должно быть положительным и отсчитывается от начата потока;
- soFromCurrent — смещение
относительно текущей позиции в потоке;
- soFromEnd — смещение должно
быть отрицательным и отсчитывается от конца потока.
Группа методов обеспечивает чтение и запись из потока ресурса компонента. Они используются при создании компонента на основе данных о нем, сохраненных в формате файлов ресурсов. Для чтения ресурса используется метод
ReadComponentRes, в котором последовательно вызываются:
- метод
ReadResHeader — для считывания заголовка ресурса компонента из потока;
- метод
ReadComponent — для считывания значений свойств компонента. Для записи
ресурса в поток применяется метод writeComponentRes.
Класс THandleStream инкапсулирует поток, связанный с физическим носителем данных через дескриптор.
Для создания потока используется конструктор
constructor Create(AHandle: Integer);
в параметре которого передается дескриптор. Впоследствии доступ к дескриптору осуществляется через свойство:
property Handle: Integer;
|