【发布时间】:2013-04-08 15:48:48
【问题描述】:
我对大多数 C++ 都非常熟悉,但我一直避免使用的一个领域是 IO 流,主要是因为我一直在不合适的嵌入式系统上使用它。然而,最近我不得不熟悉它们,我正在努力找出一些我认为应该简单的东西。
我正在寻找一种相对有效的方法来将 C++ 流中的固定数量的字符读入std::string。我可以使用read() 方法轻松读取临时char 数组并将其转换为std::string,但这相当难看并且涉及浪费副本。我还可以将整个流读入一个字符串,如下所示:
std::string getFile(std::fstream &inFile)
{
std::stringstream buffer;
buffer << inFile.rdbuf();
return buffer.str();
}
...但是无限制地读取内存通常不是一个好主意,所以我真的很想一次访问一个文件块,比如 4K 左右。我也可以一次读取字符,但这感觉比读取临时 char 数组更丑陋且效率更低。
那么,有没有一种简单的方法可以直接从包含流中接下来的 N 个字符的流中获取std::string?很可能根本没有办法做到这一点,但我觉得这样的东西会丢失很奇怪,所以我觉得我一定丢失了一些明显的东西。
顺便说一句,我对 C 文件 IO API 非常熟悉,我并不是在寻找涉及它们的解决方案。我可以用read() 和write() 解决问题,但是我正在使用的代码大量使用流,我认为保持我的代码添加的风格一致是一个好习惯。
【问题讨论】: