Я пытался читать 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
. Это, кажется, поддерживает сторону дебатов "нет ничего плохого в этом" ... но я до сих пор не вижу авторитетного источника по этому вопросу.