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;


 

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

15628. Искусство себя в эпоху Просвещения, или Духовные практики и трансцендентальный аргумент 61.5 KB
  Искусство себя в эпоху Просвещения или Духовные практики и трансцендентальный аргумент Выступление моё – скептическое в том смысле что я не столько буду пытаться решать вопросы сколько попробую их поставить. Правильно корректно фундаментально поставленный воп...
15629. Das Prinzip verum factum: seine theologische Prämissen bei Nikolaus von Kues 75.5 KB
  Das Prinzip €œverum/factum€: seine theologische Prämissen bei Nikolaus von Kues Die Tatsaechlichkeit der Wahrheit ist heutzutage etwas das von sich selbst verständlich ist. Dass die Wahrheit gewissermaßen erzeugt wird sagt man seitdem als am Morgen der Philosophie klargestellt war dass obgleich die Wahrheit von sich selbst existiert ihre Stellung doch in der Sprache in dem Urteil von der Wahrheit ist. Das bei uns vom Latein ankommende €œFaktum€ hat vor langer Zeit der ...
15630. Средневековая эстетика 195 KB
  Средневековая эстетика Начиная разговор об эстетике Средневековья следует ещё раз напомнить о том что использование слова эстетика применительно к добаумгартеновским временам некоторый анахронизм поскольку таковой науки занимающейся проблемами искусст
15631. Мера мира и невидимый показ 69 KB
  Мера мира и невидимый показ Насколько не повезло Канту в России настолько повезло Николаю Кузанскому. Если первый олицетворял собой западноевропейскую чертовщину см. классическую работу А.В.Ахутина София и черт. Кант перед лицом русской религиозной метафизики1 т
15632. НЕЙРОПСИХОЛОГИЧЕСКАЯ ШКОЛА А.Р. ЛУРИЯ 179.5 KB
  НЕЙРОПСИХОЛОГИЧЕСКАЯ ШКОЛА А.Р. ЛУРИЯ Е.Д. ХОМСКАЯ Вот уже 20 лет как ушел из жизни А.Р.Лурия 1902 1977. Время все расставило по своим местам. Оно как известно отсеивает истинные ценности от мнимых. Созданное А.Р.Лурия направление психологической науки нейропсихология в
15633. Л.С. ВЫГОТСКИЙ и А.Р. ЛУРИЯ: СТАНОВЛЕНИЕ НЕЙРОПСИХОЛОГИИ 120.5 KB
  Л.С. ВЫГОТСКИЙ и А.Р. ЛУРИЯ: СТАНОВЛЕНИЕ НЕЙРОПСИХОЛОГИИ Т.В. АХУТИНА Я хочу начать эту статью с воспоминания. В 1970 г. я закончила диссертацию и мой руководитель Л.С. Цветкова решила показать автореферат Александру Романовичу Лурия. Он сделал лишь одно исправление: в том м...
15634. КУЛЬТУРНО-ИСТОРИЧЕСКАЯ ПСИХОЛОГИЯ ВЫГОТСКОГО-ЛУРИЯ 99 KB
  Фрумкина P.M. КУЛЬТУРНОИСТОРИЧЕСКАЯ ПСИХОЛОГИЯ ВЫГОТСКОГОЛУРИЯ Журнал Человек № 3 1999 г. Идеи и время Ни для кого не новость что исследовательские методы методики научные споры имеют свои исторические истоки и объяснения. Но искать их нередко стоит не в истории дан...
15635. Совершенствование мотивации персонала 661.5 KB
  Изучение теоретических основ и современных тенденций мотивации труда и ее роли в повышении эффективности деятельности предприятия. Анализ организации стимулирования персонала ОАО Жировой комбинат. Разработка мероприятий по совершенствованию стимулирования персонала ОАО Жировой комбинат.
15636. НЕЙРОПСИХОЛОГИЧЕСКАЯ ШКОЛА А.Р. ЛУРИЯ 63.63 KB
  НЕЙРОПСИХОЛОГИЧЕСКАЯ ШКОЛА А.Р. ЛУРИЯ Е.Д. ХОМСКАЯ Вот уже 20 лет как ушел из жизни А.Р.Лурия 1902 1977. Время все расставило по своим местам. Оно как известно отсеивает истинные ценности от мнимых. Созданное А.Р.Лурия направление психологической науки нейропсихо...