c++读取大文本文件

C++ read large text file

本文关键字:文件 文本 读取 c++      更新时间:2023-10-16

我有一个非常大的文本文件,大约20GB。该文件包含多个文本行。

我需要把这个文件读入内存块。

最有效的方法是什么?-读入缓冲区,然后解析成c++向量char[]。-逐行读取文件并放入上述矢量——还是其他方式?

最有效的方法是将数据块或数据块读入缓冲区,而不是扫描缓冲区。

I/O有开销成本,每个请求可以获取的数据越多越好。

在内存中搜索总是比每次从输入中读取一个字符快。

注意两种情况:

  1. 一行继续超过缓冲区的末尾。
  2. 缓冲区未被填充。

Edit 1: Memory Mapping
另一种选择是让操作系统将文件视为内存。从本质上讲,操作系统将在适当的情况下处理文件的块或块读取。

您将必须测量性能(即概要文件),以找出哪种方法更有效以及的效率。

这只是在答案中添加一些代码:

#include <fstream>
#include <iostream>
const static size_t numToReadAtATime = 4;
int main()
{
    std::ifstream s{ "filename.dat" }; 
    while(true)
    {
        char nextChars[numToReadAtATime];
        if(s.readsome(nextChars, numToReadAtATime) != numToReadAtATime)
            break;
        //  dostuff with nextChars
    }
}