12161

Классы для представления потока данных

Лекция

Информатика, кибернетика и программирование

Классы для представления потока данных В среде Delphi существует иерархия классов для хранения и последовательного вводавывода данных. Классы этой иерархии называются потоками. Потоки лучше всего представлять как файлы. Классы потоков обеспечивают различное физическое ...

Русский

2013-04-24

43 KB

1 чел.

Классы для представления потока данных

В среде Delphi существует иерархия классов для хранения и последовательного ввода-вывода данных. Классы этой иерархии называются потоками. Потоки лучше всего представлять как файлы. Классы потоков обеспечивают различное физическое представление данных: файл на диске, раздел оперативной памяти, поле в таблице базы данных (таблица 3.1).

Класс

Описание

TStream

Абстрактный поток, от которого наследуются все остальные. Свойства и методы класса TStream образуют базовый интерфейс потоковых объектов.

THandleStream

Поток, который хранит свои данные в файле. Для чтения-записи файла используется дескриптор (handle), поэтому поток называется дескрипторным. Дескриптор — это номер открытого файла в операционной системе. Его возвращают низкоуровневые функции создания и открытия файла.

TFileStream

Поток, который хранит свои данные в файле. Отличается от ThandleStream тем, что сам открывает (создает) файл по имени, переданному в конструктор.

TMemoryStream

Поток, который хранит свои данные в оперативной памяти. Моделирует работу с файлом. Используется для хранения промежуточных результатов, когда файловый поток не подходит из-за низкой скорости передачи данных.

TResourceStream

Поток, обеспечивающий доступ к ресурсам в Windows-приложении.

TBlobStream

Обеспечивает последовательный доступ к большим полям таблиц в базах данных.

Таблица 3.1. Классы потоков 

Потоки широко применяются в библиотеке VCL и наверняка вам понадобятся. Поэтому ниже кратко перечислены их основные общие свойства и методы.

Общие свойства:

Position: Longint — текущая позиция чтения-записи.

Size: Longint — текущий размер потока в байтах.

Общие методы:

CopyFrom(Source: TStream; Count: Longint): Longint — копирует Count байт из потока Source в свой поток.

Read(var Buffer; Count: Longint): Longint — читает Count байт из потока в буфер Buffer, продвигает текущую позицию на Count байт вперед и возвращает число прочитанных байт. Если значение функции меньше значения Count, то в результате чтения был достигнут конец потока.

ReadBuffer(var Buffer; Count: Longint) — читает из потока Count байт в буфер Buffer и продвигает текущую позицию на Count байт вперед. Если выполняется попытка чтения за концом потока, то генерируется ошибка.

Seek(Offset: Longint; Origin: Word): Longint — продвигает текущую позицию в потоке на Offset байт относительно позиции, заданной параметром Origin. Параметр Origin может иметь одно из следующих значений: 0 — смещение задается относительно начала потока; 1 — смещение задается относительно текущей позиции в потоке; 2 — смещение задается относительно конца потока.

Write(const Buffer; Count: Longint): Longint — записывает в поток Count байт из буфера Buffer, продвигает текущую позицию на Count байт вперед и возвращает реально записанное количество байт. Если значение функции отличается от значения Count, то при записи была ошибка.

WriteBuffer(const Buffer; Count: Longint) — записывает в поток Count байт из буфера Buffer и продвигает текущую позицию на Count байт вперед. Если по какой-либо причине невозможно записать все байты буфера, то генерируется ошибка.

Ниже приводится фрагмент программы, демонстрирующий создание файлового потока и запись в него строки:

var

 Stream: TStream;

 S: AnsiString;

 StrLen: Integer;

begin

 // Создание файлового потока

 Stream := TFileStream.Create('Sample.Dat', fmCreate);

 ...

 // Запись в поток некоторой строки

 StrLen := Length(S) * SizeOf(Char);

 Stream.Write(StrLen, SizeOf(Integer)); // запись длины строки

 Stream.Write(S, StrLen);               // запись символов строки

 ...

 // Закрытие потока

 Stream.Free;

end;


 

А также другие работы, которые могут Вас заинтересовать

58772. Имя существительное, личные местоимения, числительные, формы глаголов to be, to have, порядок слов в утвердительном предложении 140.5 KB
  The lectures delivered by the professors of our Institute are interesting. 2. I write my exercises with a pen. 3. Our assistant’s experiments were successful. 4. He pays great attention to his studies. 5. This book was written by a famous writer. 6. The article was about doctors.
58778. Уроки Рисования и Живописи. Обрубовка - пошаговая инструкция 1.12 MB
  Тут важно учесть то что строить мы должны всегда сначала самостоятельно и при помощи визирования лишь определять насколько сильно мы промахнулись и исправлять ошибки. То есть ни в коем случае не строить при помощи визирования.