我一直在尝试阅读iostreams并更好地理解它们。偶尔我发现它强调插入器(<<
)和提取器(>>
)意在用于文本系列化。这几个地方,但这篇文章是一个很好的例子:插入器和提取器读取/写入二进制数据与文本
http://spec.winprog.org/streams/
的<iostream>
宇宙中,存在其中< <和>>在流般的方式使用尚未做案件外不遵守任何文本惯例。例如,使用Qt的QDataStream
当他们写的二进制编码数据:
http://doc.qt.nokia.com/latest/qdatastream.html#details
在语言层面上,< <和>>运营商属于您的项目超载(QDataStream不会因此有什么显然是可以接受) 。我的问题是,对于那些使用<iostream>
来使用< <和>>运算符来实现二进制编码和解码的人来说,这是否被认为是不好的做法。是否有(例如)任何期望,如果写入磁盘上的文件,该文件应该可以通过文本编辑器查看和编辑?
应该一直使用其他方法名称并将它们基于read()
和write()
?还是应该考虑文本编码仅仅是与标准库iostream集成的类可以选择忽略的默认行为?
UPDATE在这个关键术语的问题似乎是I/O被“格式化”与“格式化”(而不是术语“文本”与“二进制”)的区别。我发现这个问题:
writing binary data (std::string) to an std::ofstream?
它已经从@ TomalakGeret'kal说“我不想使用< <的二进制数据反正我的大脑把它读成‘格式化输出’评论这不是你正在做的事情,再次,它是完全有效的,但我不会像这样混淆我的大脑。“
该问题的接受答案表示,只要您使用ios::binary
就可以。这似乎加强了“辩论中没有错”的一面......但我仍然没有看到有关这个问题的权威来源。
“文本编码”是一个误导性的术语。我想说,“格式化I/O”更合适。 –
不管你的框架做什么。 –
@KerrekSB我比“格式化I/O”排除了什么“文本编码”排除了更清晰的内容。如果我有一个包含N个32位整数的对象,那么使用'write()'输出4个字节的N,然后是与这些值相对应的4 * N个字节...仍然是“格式化的”? – HostileFork