Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторки 1-6 по Delphi.pdf
Скачиваний:
39
Добавлен:
08.04.2015
Размер:
1.09 Mб
Скачать

Языки программирования

Прототип потоков данных, класс TStream

Абстрактный класс TStream описан в модуле Classes. Он определяет концепцию построения всех своих наследников и определяет общие для всех принципы чтения и записи в поток данных.

Класс вооружен всего парой свойств:

property Size: : Int64; property Position : Int64;

Размер потока данных Size измеряется в байтах. Попытка редактировать значение свойства в родительском классе не даст никаких результатов, но такая возможность реализована в некоторых потомках TStream. Свойство Position возвращает текущую позицию курсора внутри потока во время операций чтения или записи.

За изменение позиции курсора внутри потока отвечает метод function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;

Здесь параметр Offset определяет новую позицию внутри потока, а параметр Origin уточняет правила определения позиции.

type TSeekOrigin = (soBeginning, //отступ Offset байт от начала потока soCurrent, //сместиться на Offset от текущего положения soEnd); //отступ (Offset<=0) байт от конца потока

Для чтения данных из потока объявлен метод

function Read(var Buffer; Count: Longint): Longint;

Процесс записи поддерживает функция

function Write(const Buffer; Count: Longint): Longint;

Методы Read() и Write() низкоуровневые, поэтому для осуществления операций ввода/вывода я рекомендую обращаться к более совершенным процедурам:

procedure ReadBuffer(var Buffer; Count: Longint); procedure WriteBuffer(const Buffer; Count: Longint);

Данные процедуры представляют собой надстройки над методами Read() и Write(), их ключевая особенность в том, что при невозможности считать/записать указанное в аргументе Count число байтов немедленно генерируется исключительная ситуация: EReadError или EWriteError. Благодаря этому разработчик получает возможность контролировать корректность поведения своей программы.

Для копирования данных в поток из другого потока предназначен метод function CopyFrom(Source: TStream; Count: Longint): Longint;

Здесь Source — поток-источник, а Count — число копируемых байтов. При необходимости полностью скопировать поток в параметр Count передается аргумент 0. Функция возвращает размер скопированного потока. Так как для выполнения операции задействуются методы ReadBuffer() и WriteBuffer() во

59

СКФУ Кафедра компьютерной безопасности