我怎么可以发现/控制水平的内部缓冲C++fstream?
题
说我做这样(一个人为的例):
#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
.
不隶属于 StackOverflow