说我做这样(一个人为的例):

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
    ifstream ifs(argv[1]);

    char ch;
    while(ifs.read(&ch, 1)) {
        cout << ch;
    }
}

我假设(希望)的法师的图书馆做一些内部缓冲这里并不把这变成gazillions的一个字节的文件阅读的操作在操作系统的水平。

有没有一种方法:

a) 找出的大小ifstream的内部缓冲区的?

b) 变化大小的ifstream的内部缓冲区的?

我正在写一个文件过滤器,需要读多千兆字节的文件,在小块和我想尝试不同的缓冲区大小看它是否会影响性能。

有帮助吗?

解决方案

你可以使用 ios::rdbuf() 来得到一个指 streambuf 对象。这表示对象的内部缓冲区的流。

你可以打电话 streambuf::pubsetbuf(char * s, streamsize n) 设置一个新的内部缓冲带给予的大小。

看看 这个链接 更多的细节。

编辑: 这里是它会怎么看你的情况:


#include <iostream>
#include <fstream>
using namespace std;

int main(int argCount, char ** argList[])
{
    ifstream inStream(argList[1]);

    char myBuffer [512];
    inStream.rdbuf()->pubsetbuf(myBuffer, sizeof(myBuffer));

    char ch;
    while(inStream.read(&ch, 1))
    {
        cout << ch;
    }
}

编辑: 正如指出的 litb, 实际行为 streambuf::pubsetbuf 是"执行情况定义的".

如果你真的想要发挥与周围的缓冲区,可能具有推出自己的缓冲类继承 streambuf.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top