【发布时间】:2013-09-19 18:15:33
【问题描述】:
有没有办法向 std::ifstream 添加缓冲,因为多次查找 (seekg) 和读取不会导致不必要的读取。
我基本上想使用流多次读取一个文件块,但我希望只从磁盘读取一次块。
这个问题可能有点离题,因为我想混合缓冲读取和流...
例如:
char filename[] = "C:\\test.txt";
fstream inputfile;
char buffer[20];
inputfile.open(filename, ios::binary);
inputfile.seekg(2, ios::beg);
inputfile.read(buffer, 3);
cout << buffer << std::endl;
inputfile.seekg(2, ios::beg);
inputfile.read(buffer, 3);
cout << buffer3 << std::endl;
我只想从磁盘读取一次。
【问题讨论】:
-
相信您的操作系统的页面缓存会为您做到这一点。如果您绝对不能依赖它,那么实际上将文件读入您创建的预分配缓冲区。
-
如果文件在第一次读取后发生更改,第二次读取将获取新数据,但我想继续使用第一次读取的缓冲区。我想除了使用 char 缓冲区进行任何进一步的操作之外别无他法 - 只是想知道是否有某种方法可以将流配置为具有陈旧数据......我想这很愚蠢:)
-
哦,好吧!您应该在您的问题中提到,我认为它仅针对性能:)。
标签: c++ stream buffer ifstream