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