gpt4 book ai didi

c++ - 我如何发现/控制 C++ fstream 中的内部缓冲级别?

转载 作者:太空狗 更新时间:2023-10-29 21:09:28 27 4
gpt4 key购买 nike

假设我这样做(一个人为的例子):

#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;
}
}

我假设(希望)iostream 库在这里做一些内部缓冲,而不是在操作系统级别将其转换为大量的单字节文件读取操作。

有没有办法:

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

b) 更改 ifstream 内部缓冲区的大小?

我正在编写一个文件过滤器,需要以小块读取数 GB 的文件,我想尝试不同的缓冲区大小,看看它是否会影响性能。

最佳答案

您可以使用 ios::rdbuf() 获取指向 streambuf 对象的指针。该对象表示流的内部缓冲区。

您可以调用 streambuf::pubsetbuf(char * s, streamsize n) 以给定大小设置新的内部缓冲区。

参见 this link了解更多详情。

编辑:这是您的情况:


#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 继承的缓冲类。

关于c++ - 我如何发现/控制 C++ fstream 中的内部缓冲级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com