Базовые
классы TStream и THandleStream
В основе иерархии классов потоков лежит класс Tstream. Он обеспечивает выполнение основных операций потока безотносительно к реальному носителю информации. Основными из них являются чтение и запись данных.
Класс Tstream порожден непосредственно от класса TObject.
Потоки также играют важную роль в чтении/записи компонентов из файлов ресурсов (DFM). Большая группа методов обеспечивает взаимодействие компонента и потока, чтение свойств компонента из ресурса и запись значений свойств в ресурс.
Таблица 9.3. Свойства и методы класса Tstream
Объявление |
Описание |
property Position: Longint; |
Определяет текущую позицию в потоке |
property Size: Longint; |
Определяет размер потока в байтах |
function CopyFrom( Source: TStream; Count: Longint) : Longint; |
Копирует из потока Source Count байты, начиная с текущей позиции. Возвращает число скопированных байтов |
function Read(var Buffer; Count: Longint) : Longint; virtual; abstract; |
Абстрактный класс, перекрываемый в наследниках. Считывает из потока Count байты в буфер Buffer. Возвращает число скопированных байтов |
procedure Read3uffer (var Buffer; Count: Longint) ; |
Считывает из потока Count байты в буфер Buffer. Возвращает число скопированных байтов |
function Seek (Off set: Longint; Origin: Word): Longint; virtual; abstract; |
Абстрактный класс, перекрываемый в наследниках. Смещает текущую позицию в реальном носителе данных на Offset байтов в зависимости от условия Origin (см. ниже) |
function Write (const Buffer; Count: Longint): Longint; virtual; abstract; |
Абстрактный класс, перекрываемый в наследниках. Записывает в поток Count байты из буфера Buffer. Возвращает число скопированных байтов |
procedure WriteBuffer (const Buffer; Count: Longint); |
Записывает в поток Count байты из буфера Buffer. Возвращает число скопированных байтов |
function ReadComponent (Instance: TComponent): TComponent; |
Передает данные из потока в компонент instance, заполняя его свойства значениями |
function ReadComponentRes (Instance: TComponent) : TComponent; |
Считывает заголовок ресурса компонента Instance и значения его свойств из потока. |
procedure ReadResHeader; |
Считывает заголовок ресурса компонента из потока |
procedure WriteComponent (Instance: TComponent) ; |
Передает в поток значения свойств компонента Instance |
procedure WriteComponentRes (const ResName: string; Instance: TComponent) ; |
Записывает в поток заголовок ресурса компонента Instance и значения его свойств |
Итак, в основе операций считывания и записи данных в потоке лежа! методы Read и Write. Именно они вызываются для реального выполнения операции внутри методов ReadBuffer И WriteBuffer, ReadComponent И WriteComponent. Так как класс TStream является абстрактным, то методы Read и write также являются абстрактными. В классах-наследниках они перекрываются, обеспечивая работу с конкретным физическим носителем данных.
Метод Seek используется для изменения текущей позиции в потоке. "Точка отсчета" позиции зависит от значения параметра Origin:
Группа методов обеспечивает чтение и запись из потока ресурса компонента. Они используются при создании компонента на основе данных о нем, сохраненных в формате файлов ресурсов. Для чтения ресурса используется метод ReadComponentRes, в котором последовательно вызываются:
Класс THandleStream инкапсулирует поток, связанный с физическим носителем данных через дескриптор.
Для создания потока используется конструктор
constructor Create(AHandle: Integer);
в параметре которого передается дескриптор. Впоследствии доступ к дескриптору осуществляется через свойство:
property Handle: Integer;
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.