Потоки данных в Delphi
Под потоком здесь понимается объект TStream, который является базовым объектом для потоков разных типов. В этом объекте реализованы все необходимые свойства и методы, используемые для чтения и записи данных на различные типы носителей (память, диск, медиа-носители). Благодаря этому объекту доступ к разным типам носителей становится одинаковым. Сейчас мы не будем рассматривать пример использования потоков, а ограничимся только теоретическими знаниями.
Объект TFileStream является потомком главного объекта TStream и позволяет получить доступ к диску. Точно так же можно получить доступ:
к памяти через объект TmemoryStream;
к сети через объект TWinSocketstream;
к СОМ-интерфейсу через объект TOlestream;
к строкам, находящимся в динамической памяти, через объект TStringStream.
Это неполный список объектов потоков, но даже все эти объекты мы рассматривать не будем. Рассмотрим только базовый объект TStream. Работа с другими объектами идентична и точно так же можно работать с любым другим типом потока.
Итак, давайте разберемся со свойствами и методами потока
Свойства
Position — указывает на текущую позицию курсора в потоке. Начиная с этой позиции будет происходить чтение данных;
Size — размер данных в потоке.
Методы
CopyFrom — метод предназначен для копирования из другого потока. У него два параметра: указатель на поток, из которого надо копировать, и число, показывающее размер данных, подлежащих копированию;
Read — прочитать данные из потока, начиная с текущей позиции курсора. У этого метода два параметра — буфер, в который будет происходить чтение, и число, показывающее размер данных для копирования;
Seek — переместиться в новую позицию в потоке. У этого метода два параметра:
Первый параметр: число, указывающее на позицию, в которую надо перейти. Если вам нужно передвинуться на пять байт, то просто укажите цифру 5.
Второй параметр: откуда надо двигаться. Тут возможны три варианта:
soFromBeginning — двигаться на указанное количество байт от начала файла;
soFromCurrent — двигаться на указанное количество байт от текущей позиции в файле к концу файла;
soFromEnd — двигаться от конца файла к началу на указанное количество байт.
SetSize — установить размер потока. Здесь только один параметр — число, указывающее новый размер потока. Допустим, что вам надо уменьшить размер файла. В этом случае с помощью метода SetSize потока TFiieStream вы можете уменьшить или даже увеличить размер файла.
Write — записать данные в текущую позицию потока. У этого метода два параметра:
переменная, содержимое которой нужно записать;
число байт для записи.
Это основные методы, которые вам могут понадобиться при работе с потоками.
Слова Stream и Thread переводятся на русский язык почему-то одинаково: поток. Но в программировании это разные термины. Stream — это поток каких-либо данных, a Thread обеспечивает многопоточность приложений (параллельное выполнение или вычисление). Чтобы не путаться, можно использовать один термин — поток, но в дальнейшем нужно понять разницу между двумя этими терминами.
Совет: Обращайте внимание на англоязычное название объектов, с которыми будете работать и помните, что Stream — это поток данных, a Thread — отдельная нить процесса, выполняющего инструкции программы. Процесс — это отдельная программа, которая может состоять из нескольких потоков (Thread). В данном случае поток можно воспринимать как процедуру, которая выполняется параллельно основной задаче. Именно поэтому и нужно вам следить за названиями, чтобы не путать поток данных и программный поток.