Неформатируемый обмен данными с потоками
Библиотека потоков C++ предусматривает различные функции для неформатируемого ввода и вывода. Эти функции, в качестве альтернативы форматирующим операциям помещения (извлечения), позволяют читать и записывать байты данных без всякой модификации. При использовании этих функций никакие установки флагов и атрибутов форматирования не влияют иа процесс обмена с потоком. Чаще всего необходимость в подобных средствах возникает при работе с файловыми потоками, связанными с двоичными (нетекстовыми) файлами.
Класс ostream (базовый для всех выходных потоков) содержит две перегруженные функции для записи в поток «сырых» данных:
ostream & put (char);
ostream & write (char *, int);
Первая функция помещает в выходной поток, для которого она вызвана, одиночный символ (байт); вторая предназначена для вывода в поток указанного количества символов из буфера. Обе функции возвращают ссылку на объект-поток, для которого они выполняются, поэтому можно организовать цепочку вызовов.
Функции для чтения из потока «сырых» данных определены в классе istream (заголовочный файл iostream.h), где они декларируются следующим образом
// ввод произвольных данных в массив символов
istream & read(char*, int);
// читать символы в массив до символа-ограничителя
istream & get(char*, int, char = ‘\n’);
istream & getline(char*, int, char = ‘\n’);
// извлечь 1 символ c возвратного кода
int get();
Условно эти функции можно разделить на три группы. Функция istream& read(char*, int) предназначена для извлечения из потока указанного количества символов (второй параметр) и переноса их в буфер (первый параметр), который должен иметь размер, достаточный для размещения указанного количества байтов. Обе функции istream& get(char*, int, char=‘\n’) и istream& getline(char*, int, char=‘\n’) преназначены для чтения символов вплоть до ограничителя (обычно используются при вводе символьных строк); дополнительно к описанным параметрам функции read эти функции имеют третий параметр, специфицирующий символ-ограничитель (по умолчанию – ‘\n’). Чтение из потока в буфер продолжается до наступления одного из следующих трех событий: найден ограничитель, извлечено заданное количество символов или встретился конец файла (для файловых потоков). В первом случае ограничитель в буфер (в формируемую строку) не переносится, а вместо него автоматически добавляется «концевой» символ строки ‘\0’, при этом сам символ-ограничитель извлекается из потока лишь функцией getline, в то время как get оставляет его в потоке.
Функция int get() предназначена для извлечения одиночного символа. Эта функция возвращают код символа либо (при пустом потоке) код конца файла EOF.
Дата добавления: 2021-07-22; просмотров: 324;