我一直读到有人告诉我,在处理二进制文件时,应该使用 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/