C ++ - 有效地按顺序读取文件

时间:2014-05-15 20:15:24

标签: c++

我需要用C ++顺序读取一个文件,一次处理4个字符(但它是一个滑动窗口,所以下一个字符与之前的3个一起处理)。我可以将文件的块读入缓冲区(我知道mmap()会更有效但我想坚持使用与平台无关的普通C ++),或者我可以使用{{1一次读取文件一个字符}}。该文件可能是任意大的,因此读取整个文件不是一种选择。

哪种方法更有效?

2 个答案:

答案 0 :(得分:2)

最有效的方法是使用最少的函数调用或请求将大量数据读入内存。

目标是保持硬盘旋转。其中一个瓶颈是等待硬盘旋转以达到正确的速度。另一种方法是尝试在您所请求的数据所在的硬盘驱动器上找到扇区。第三个瓶颈是与数据库和内存的冲突。

所以我将read方法投入缓冲区并搜索缓冲区。

答案 1 :(得分:1)

确定一次可以读取的最大数据块。然后通过块读取文件。

假设您一次只能处理2K个字符。然后,使用:

std::ifstream if(filename);
char chunk[2048];
while ( if.read(chunk, 2048)) )
{
   std::streamsize nread = in.gcount();
   // Process nread number of characters of the chunk.
}