Поток. Иерархия классов потоков: Потоки – классы

advertisement
1. Поток. Иерархия классов потоков:
Потоки – классы, предназначенные для хранения и последовательного ввода-вывода данных.
Класс
Описание
Абстрактный поток. От него наследуются все остальные. Свойства и методы образуют базовый
TStream
интерфейс потоковых объектов.
Дескрипторный поток. Хранит данные в файле. Для чтения-записи файла используется дескриптор
(handle).
THandleStream
Дескриптор — это номер открытого файла в операционной системе. Его возвращают низкоуровневые
функции создания и открытия файла.
Файловый поток. Хранит данные в файле. Поток открывает-создает файл по имени, переданному в
TFileStream
конструктор.
Хранит данные в оперативной памяти. Моделирует работу с файлом. Используется для хранения
TMemoryStream
промежуточных результатов, когда файловый поток не подходит из-за низкой скорости передачи
данных.
TResourceStream
Обеспечивает доступ к ресурсам в Windows-приложении.
TBlobStream
Обеспечивает последовательный доступ к большим полям таблиц в базах данных.
2. Свойства и методы TStream:
Свойства
Position: Longint
текущая позиция чтения-записи.
Size: Longint
текущий размер потока в байтах.
Методы
CopyFrom (Source: TStream; Count:
копирует Count байт из потока Source в свой поток.
Longint): Longint
Read (var Buffer; Count: Longint): Longint
читает Count байт из потока в буфер Buffer, продвигает текущую позицию на Count
байт вперед и возвращает число прочитанных байт.
(Если значение функции меньше значения Count, то в результате чтения был
достигнут конец потока.)
ReadBuffer (var Buffer; Count: Longint)
читает из потока Count байт в буфер Buffer и продвигает текущую позицию на
Count байт вперед.
(Если выполняется попытка чтения за концом потока, то генерируется ошибка.)
Seek (Offset: Longint; Origin: Word):
продвигает текущую позицию в потоке на Offset байт относительно позиции,
Longint
заданной параметром Origin. Параметр Origin следующие значения:
0 – относительно начала потока; 1 – относительно текущей позиции в потоке; 2 –
относительно конца потока.
Write (const Buffer; Count: Longint):
записывает в поток Count байт из буфера Buffer, продвигает текущую позицию на
Longint
Count байт вперед и возвращает реально записанное количество байт. (Если
значение функции отличается от значения Count, то при записи была ошибка.)
WriteBuffer (const Buffer; Count: Longint) записывает в поток Count байт из буфера Buffer и продвигает текущую позицию на
Count байт вперед.
(Если по какой-либо причине невозможно записать все байты буфера, то
генерируется ошибка.)
3. Пример записи переменной string в поток:
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;
1. Сериализация и десериализация:
Сериализация – процесс сохранения состояния объекта во внешнюю среду.
Десериализация – процесс восстановления состояния объекта из внешней среды.
2. Почему сериализация и десериализация требует использования потоков, почему нельзя работать с файлами
через read и write:
3. Высокоуровневая и низкоуровневая сериализация:
Низкоуровневая сериализация – это вид сериализации, при котором разработчик сам заботится о внедрении форматов и
методах сохранения состояния объекта.
Высокоуровневая сериализация производится стандартными средствами среды визуальной разработки.
4. Основное правило высокоуровневой сериализации:
При сериализации может быть сохранена и восстановлена только та информация, что записана в read-write publishedсвойствах объекта или в псевдосвойствах.
5. Требования для сериализации иерархии классов стандартными методами Delphi. Пример:
 Унаследовать класс одного из сериализуемых объектов от TComponent.
 Создать поток и вызвать метод WriteComponent(Inst: TComponent).
6. GetChildren. Параметры и назначение:
Используется для решения проблемы, возникающей при использовании высокоуровневой сериализации классов
содержащих списки объектов.
Автоматически вызывается, когда система сериализации хочет опросить компонент о том, какие еще компоненты нужно
сохранить.
Type
TGetChildProc = procedure (Child: TComponent) of object;
GetChildren(Proc: TGetChildProc; Root: TComponent);
// Proc – процедура, в качестве аргумента которой указывается компонент который нужно
сериализовать вместе с данным
// Root – ссылка на объект, для которого был вызван метод Stream.WriteComponent
7. Основные свойства и методы TreeView:
Свойства
AutoExpand: Boolean
= True – узлы открываются и сворачиваются одним кликом.
ChangeDelay: Integer
Время задержки генерации события OnChange.
HideSelection: Boolean
= True – выбранный узел высвечивается на экране как выбранный, если TreeView
не в фокусе.
HotTrack: Boolean
= True – отображение узлов изменяется при проведении указателя.
Images: TCustomImageList
Элемент из массива основных иконок для объектов TTreeNode.
Items: TTreeNodes
Доступ к узлам дерева.
ReadOnly: Boolean
= True – запрещено редактирование узлов.
Selected: TTreeNode
Ссылка на текущий выбранный элемент.
StateImages: TCustomImageList
Элемент из массива иконок для узлов состояния.
Методы
FullColapse
Сворачивает все узлы.
FullExpand
Разворачивает все узлы.
OnChange: TTVChangedEvent
Генерируется после каждого изменения текущего выбранного узла.
OnChanging: TTVChangingEvent
Генерируется при каждой попытке изменить выбранный узел.
8. Основные свойства и методы TTreeNodes:
Свойства
Count: Integer
Количество узлов дерева.
Item [Index: Integer]: TTreeNode
Массив объектов TTreenode.
Методы
Add (Node: TTreeNode; const S: string):
Добавляет TTreeNode в дерево (добавление в тот же уровень что и Node).
TTreeNode
AddChild (Node: TTreeNode, const S:
Добавляет TTreeNode в дерево (добавление в конец дочерних узлов Node).
string): TTreeNode
Clear
Удаляет все узлы.
Delete (Node: TTreeNode)
Удаляет Node и его потомков.
9. Основные свойства и методы TTreeNode:
Свойства
Count: Integer
Количество дочерних элементов.
Data: Pointer
Связь TTreeNode с данными.
Expanded: Boolean
= True – узел в развернутом состоянии.
HasChildren: Boolean
= True – есть дочерние узлы.
ImageIndex: TImageIndex
Индекс иконки, при которой элемент не выбран.
Item [Index: Integer]
Доступ к дочерним узлам.
Level: Integer
Уровень узла.
Parent: TTreeNode
Доступ к родителю.
Selected: Boolean
= True – текущий выбранный узел.
SelectedIndex: Integer
Индекс иконки, при которой элемент выбран.
StateIndex: Integer
Индекс дополнительной иконки, изображаемой слева от основной.
Методы
Collapse (Recurse: Boolean)
Сворачивает узел. Если Recurse = True, то сворачиваются и дочерние.
Delete
Удаляет узел.
DeleteChildren
Удаляет потомков.
Expand (Recurse: Boolean)
Разворачивает узел. Если Recurse = True, то разворачиваются и дочерние.
MakeVisible
Раскрывает все родительские узлы, чтобы сделать узел видимым.
Download