Вставщики и экстракторы, считывающие / записывающие двоичные данные в сравнении с текстом

Я пытался читать iostreams и лучше их понимать. Иногда я обнаруживаю, что подчеркивается, что средства вставки ( ) и экстракторы ( >> ) предназначены для использования в текстовой сериализации. Это несколько мест, но эта статья является хорошим примером:

http://spec.winprog.org/streams/

За пределами вселенной бывают случаи, когда > используются потокоподобным способом , но не подчиняются никаким текстовым соглашениям. Например, они записывают данные в двоичной кодировке при использовании Qt QDataStream :

http://doc.qt.nokia.com/latest/qdatastream.html#details

На уровне языка, операторы > принадлежат вашему проекту для перегрузки (следовательно, то, что делает QDataStream, явно приемлемо). У меня вопрос, будет ли плохой практикой для тех, кто использует , использовать операторы > для реализации двоичного кодирования и декодирования.Есть ли (например) какие-либо ожидания, что при записи в файл на диске этот файл должен быть доступен для просмотра и редактирования с помощью текстового редактора?

Следует ли всегда использовать другие имена методов и основывать их на read () и write () ? Или текстовые кодировки следует рассматривать просто как поведение по умолчанию, которое классы, интегрирующиеся со стандартной библиотекой iostream, могут игнорировать?


ОБНОВЛЕНИЕ Ключевой терминологической проблемой в этом вопросе, по-видимому, является различие ввода-вывода, который «отформатирован» vs "неформатированный" (в отличие от терминов "текстовый" и "двоичный"). Я нашел этот вопрос:

запись двоичных данных (std :: string) в std :: ofstream?

В нем есть комментарий от @ TomalakGeret'kal, говорящий «Я бы не хотел использовать

. вопрос говорит, что это нормально, если вы используете ios :: binary . Это, кажется, поддерживает сторону дебатов "нет ничего плохого в этом" ... но я до сих пор не вижу авторитетного источника по этому вопросу.

6
задан Community 23 May 2017 в 12:28
поделиться