Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приёмнику. Потоки С++, в отличие от функций ввода/вывода в стиле С, обеспечивают надёжную работу как со стандартными, так и с определёнными программистом типами данных, а также единообразный и понятный синтаксис. Потоки активно используются в визуальном объектно-ориентированном программировании. На сегодняшний день, потоки С++ - это лучший способ записывать данные в файл, лучший способ организации данных в памяти для последующего использования при вводе/выводе данных не только в консольных программах, но и в визуальных элементах графического интерфейса пользователя (GUI).
Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (ОЗУ, файл на диске, клавиатура, консоль, принтер и т.д.). Обмен с потоком для увеличения скорости передачи данных производится, как правило, через специальную область оперативной памяти – буфер.
По направлению обмена потоки можно разделить на входные (данные вводятся в память), выходные (данные выводятся из памяти) и двунаправленные (допускающие как извлечение, так и включение). Иначе говоря, если движение данных направлено в программу, то такой поток называют входным потоком (input stream). Если движение данных направлено из программы, то такой поток называют выходным потоком (output stream). Эти потоки тесно связаны со стандартными потоками ввода/вывода ОС.
По виду устройств, с которыми работает поток, можно разделить потоки на стандартные, файловые и строковые. Стандартные потоки предназначены для передачи данных от клавиатуры и на экран, файловые потоки – для обмена информацией с файлами на внешних носителях данных, а строковые потоки – для работы с массивами символов в оперативной памяти.
Под файлом обычно подразумевается именованная информация на носителе данных, например, на жёстком или гибком магнитном диске. Логически файл можно представить как конечное количество последовательных байтов. По способу доступа файлы можно разделить на последовательные, чтение и запись в которых производятся с начала байт за байтом, и файлы с произвольным доступом, допускающие чтение и запись в указанную позицию.
Библиотека С++ предлагает три класса для работы с файлами: ifstream – класс входных файловых потоков; ofstream – класс выходных файловых потоков; fstream – класс двунаправленных файловых потоков. Эти классы объявлены в заголовочном файле fstream.h и поддерживают перегруженные операции << и >>, флаги форматирования, манипуляторы и т.п.
Использование файлов в программе предполагает следующие операции:
- создание потока;
- открытие потока и связывание его с файлом;
- обмен данными (ввод/вывод);
- уничтожение потока;
- закрытие файла.
Потоковый ввод/вывод файлов можно разделить на форматированный и двоичный (бинарный).