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;


 

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

4401. Космологические модели вселенной 87.5 KB
  Космологические модели вселенной ЧТО ТАКОЕ КОСМОЛОГИЯ? Современная космология - это астрофизическая теория структуры и динамики изменения Метагалактики, включающая в себя и определенное понимание свойств всей Вселенной. Космология основывается на ас...
4402. Вивчення впливу зовнішнього оточення організації на її діяльність 111 KB
  Вступ Не існує жодної організації, що не мала б зовнішнього оточення і не знаходилася б з ним у стані постійної взаємодії. Успіх будь-якої організації залежить не тільки від факторів діючих всередині організації, але, вирішальним чином, залежи...
4403. Розрахунки чеками та векселями 51.5 KB
  Чек — грошовий документ встановленої форми, що містить беззаперечне письмове розпорядження власника рахунка (клієнта) банкові, який обслуговує його, сплатити певну суму грошей пред'явникові чека або іншій вказаній у чеку особі
4404. Агропомышленный комплекс Новосибирской области 92.5 KB
  Введение Новосибирская область: государственно-территориальное образование, входящее в состав Российской Федерации на правах ее равноправного субъекта, расположена в географическом центре страны, в юго-восточной части Западно-Сибирской равнины, глав...
4405. Фанализ - филосовско-аналитическая теория истины 152 KB
  Эта работа была задумана для рассмотрения более объективной оценки окружающего мира. Здесь рассматриваются более двадцати вопросов, наиболее значимых, при объяснении такого подхода поиска истины как Фанализ. Этот взгляд должен дать толчок для самора...
4406. Разработка тягового и топливно-экономического расчета автомобиля 1.09 MB
  В курсе теории автомобиля тяговый и топливно-экономический расчет является одним из важнейших разделов. Этот расчет позволяет по некоторым заданным параметрам определить остальные конструктивные и эксплуатационные параметры...
4407. Адвокат в гражданском процессе 268.5 KB
  Адвокат в гражданском процессе Введение Современный человек постоянно сталкивается с ситуациями, в которых ему необходимо руководствоваться теми или иными правовыми предписаниями, то есть законодательно закрепленными общеобязательными правилами пове...
4408. Административная ответственность за нарушение налогового законодательства 311 KB
  Административная ответственность за нарушение налогового законодательства Введение Процесс формирования норм налогового законодательства выявил особую актуальность установления ответственности за налоговые нарушения. Прямая зависимость государственн...
4409. Адвокатура Украины. Организация современной адвокатуры Украины 63 KB
  Адвокатура Украины. Организация современной адвокатуры Украины. Принципы и гарантии адвокатской деятельности. Согласно Закону адвокатура Украины является добровольным профессиональным общественным объединением, призванным содействовать защите прав, свобо...