Что делает двоичный поток особенным? - PullRequest
3 голосов
/ 22 сентября 2011

std::fstream имеет возможность рассматривать потоки как двоичные, а не текстовые.Какая разница?

Насколько я знаю, все зависит от того, как файл открывается в других программах.Если я напишу A в двоичный поток, он просто преобразуется в 01000001 (65, * ASCII-код A) - точно такое же представление.Это можно прочитать как букву «А» в текстовых редакторах или двоичную последовательность 01000001 для других программ.

Я что-то упустил, или не имеет никакого значения, считается ли поток двоичнымнет?

Ответы [ 5 ]

5 голосов
/ 22 сентября 2011

В текстовых потоках символы новой строки могут переводиться в и из символа \n; с двоичными потоками этого не происходит. Причина в том, что разные ОС имеют разные соглашения для хранения новых строк; Unix использует \n, Windows \r\n и Mac старой школы \r. Для программы на C ++, использующей текстовые потоки, все они выглядят как \n.

1 голос
/ 22 сентября 2011

В Linux / Unix / Android нет никакой разницы.

В Mac OS / X или более поздней версии нет никакой разницы, но я думаю, старых компьютеров Mac могут изменить '\ n' на '\ r' при чтении, и обратная запись (только для текстового потока).

В Windows для текстового потока некоторые символы обрабатываются специально. Символ '\ n' записывается как "\ r \ n", а пара "\ r \ n" читается как "\ n". Символ '\ 0x1A' обрабатывается как "конец файла" и прекращает чтение.

Я думаю, что Symbian PalmOS / WebOS ведут себя так же, как Windows.

Бинарный поток просто записывает байты и не выполняет никаких преобразований на любой платформе.

1 голос
/ 22 сентября 2011

Если вы откроете его как текст, среда выполнения C или C ++ выполнит преобразования новой строки в зависимости от хоста (Windows или Linux).

1 голос
/ 22 сентября 2011

Практическим отличием является обработка конечных последовательностей в операционных системах Microsoft.

Двоичные потоки возвращают данные в файле точно в том виде, в котором они хранятся.Текстовые потоки нормализуют конечные последовательности, заменяя их на '\n'.

1 голос
/ 22 сентября 2011

С другой стороны, это особые текстовые потоки, особенно из-за перевода \n в \n или \r\n (или даже \r ..) в зависимости от вашей системы.1005 *

...