编写我自己的iostream实用程序类:这是个好主意吗?

时间:2010-03-14 04:42:51

标签: c++ iostream

我有一个应用程序想要从文件中逐字逐句地读取空格。我在这些方面使用代码:

std::istream in;
string word;
while (in.good()) {
    in>>word;
    // Processing, etc. 
    ...
}

我的问题是对单词本身的处理实际上相当轻松。主要时间消费者是我运行的一组mySQL查询。

我在想的是编写一个从文件中读取类似千字节的缓冲类,将字符串流初始化为缓冲区,并从中透明地执行提取以避免大量的IO操作。

思考和建议?

1 个答案:

答案 0 :(得分:2)

istream适用于缓冲类,因此它通常会以相当大的块读取(尽管确切的大小不能保证)。因此,您可能已经获得了所需的效果。如果你自己处理缓冲,这有点不重要 - 当你到达缓冲区的末尾时,你可能会在一个单词的中间,所以你必须将当前的单词复制到缓冲区的开头,读取更多内容以填充缓冲区的其余部分,然后才能处理该单词。

您可能只需使用经过纠正的循环:

while (in>>word) {
    // process word
}

...但是可能通过将文件直接读入字符串流并从那里处理字词来提高速度:

std::istream in;
std::istringstream buffer;

buffer << in.rdbuf();
while (buffer >> word) {
    // process word
}

但这对于一个非常大的输入文件可能是有害的。