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;


 

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

23638. ОЧЕРКИ ПО ОБЩЕМУ ЯЗЫКОЗНАНИЮ 889.5 KB
  В главах Язык и Развитие языка частично использованы напечатанные в разное время статьи. Языкознание располагает большим количеством ответов на него каждый из которых оказывает прямое влияние на определение методов и направлений изучения языка установление форм и закономерностей его развития и по сути говоря на формирование всей проблематики науки о языке. форма мысли но такая которая ни в чем кроме языка не встречается А. Язык есть комплекс членораздельных и знаменательных звуков и созвучий соединенных в одно целое чутьем...
23639. Курс общего языкознания 1.87 MB
  Теория знаковой природы языка . Структурный характер языка . Развитие языка 152 1. Общие и частные законы языка .
23641. ФІНАНСОВА ЗВІТНІСТЬ, ЇЇ ЗМІСТ ТА ІНТЕРПРЕТАЦІЯ 240 KB
  Склад, призначення і загальні вимоги до фінансової звітності. Зміст та методика складання основних форм фінансової звітності. Методика аналізу фінансового стану підприємства на базі звітності.
23642. ВВЕДЕНИЕ В ТЕОРЕТИЧЕСКОЕ ЯЗЫКОЗНАНИЕ 258.5 KB
  Описание языка в формальном аспекте 1. Описание языка в функциональном аспекте 1. Происхождение языка Модуль 2. Дисциплины изучающие звуковую сторону языка 2.
23643. КУРС ЛЕКЦИЙ ПО ОБЩЕМУ ЯЗЫКОЗНАНИЮ 2.1 MB
  проблематика наиболее актуальные проблемы современного языкознания: системность и структурность языка язык и мышление язык и речь и др. Универсальные свойства языка. Фундаментальные свойства языка с позиции современнойлингвистики. Во втором разделе раскрываются основные принципы современной теории языка важнейшие проблемы лингвистической науки определяющие подходы к решению всех частных лингвистических вопросов.
23644. Как быстро научиться читать на чужом языке 50.5 KB
  А все остальное ученик может делать сам: вникать в грамматику читать тексты заниматься лексикой. Те кто только начал осваивать немецкий язык сначала может читать текст с подсказками затем тот же текст без подсказок. После того как он прочитает неадаптированный текст нужно читать следующий адаптированный.