Неформатируемый обмен данными с потоками


Библиотека потоков 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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.