В основе иерархии классов потоков лежит класс Tstream. Он обеспечивает выполнение основных операций потока безотносительно к реальному носителю информации. Основными из них являются чтение и запись данных. Класс TStream порожден непосредственно от класса TObject.
Таблица 2. Свойства и методы класса TStream
Объявление | Описание |
property Position: Longint; | Определяет текущую позицию в потоке |
property Size: 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. Возвращает число скопированных байтов |
Итак, в основе операций считывания и записи данных в потоке лежат методы Read и Write. Именно они вызываются для реального выполнения операции внутри методов ReadBuffer и WriteBuffer. Так как класс TStream является абстрактным, то методы Read и Write также являются абстрактными. В классах-наследниках они перекрываются, обеспечивая работу с конкретным физическим носителем данных.
|
|
Метод Seek используется для изменения текущей позиции в потоке. "Точка отсчета" позиции зависит от значения параметра Origin:
· soFromBeginning — смещение должно быть положительным и отсчитывается от начата потока;
· soFromCurrent — смещение относительно текущей позиции в потоке;
· soFromEnd — смещение должно быть отрицательным и отсчитывается от конца потока.
Класс THandleStream инкапсулирует поток, связанный с физическим носителем данных через дескриптор.
Для создания потока используется конструктор
constructor Create(AHandle: Integer);
в параметре которого передается дескриптор. Впоследствии доступ к дескриптору осуществляется через свойство:
property Handle: Integer;