具有二进制数据的 C++ fstream << 和 >> 运算符

标签 c++ iostream standard-library

我一直读到有人告诉我,在处理二进制文件时,应该使用 read() 和 write() 而不是 << 和 >> 运算符,因为它们是用于格式化数据的。我还读到过可以使用它们,但这是一个高级主题,我找不到任何人深入研究和讨论的地方。

我最近看到一些代码执行了以下操作:

 std::ifstream file1("x", ios_base::in | ios_base::binary);
 std::ofstream file2("y", ios_base::app | ios_base::binary);

 file1 << file2.rdbuf();

当我指出对二进制文件使用 << 运算符时,我被告知 rdbuf() 调用返回一个 streambuf * 并且 << 重载了 streambuf* 并进行了没有格式的直接复制并且是因此安全。

这是真的而且安全吗?效率怎么样?有什么问题吗?详细信息将不胜感激。

谢谢!

最佳答案

是的(参见 27.6.2.5.3/6,其中描述了 << 对 streambuf 的重载)。

关于具有二进制数据的 C++ fstream << 和 >> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1278259/

相关文章:

c++ - 我的非成员静态函数允许更改和创建非静态变量

c++ - 如何将 QList 从 QML 传递到 C++/Qt?

c++ - 检查类型实例是否可以流式传输

c++ - 剪切带有多个结束符的字符串

c++ - 如何从另一个进程的调用堆栈地址中检索函数名称

c++ - std::vector,在堆上分配了元素-我需要规则5吗?

c++ - 与 C stdio 库相比,C++ iostream 必须提供什么?

c++ - 数字火星 - 无法打开输入文件 'iostream'

c++ - 标准内容的库(即 : cout, 等)*新手问题* :)

c++ - C++ 中快速、简单的 CSV 解析