遍历10GB以上的二进制文件

Iterate over 10GB+ binary file

本文关键字:二进制文件 10GB 遍历      更新时间:2023-10-16

在不使用boost库的情况下,读取10GB二进制文件并解析每个字节的最简单方法是什么?

它与流、文件、内存映射文件等混淆。

我真的只想要这样的东西:

char* buffer = read(filename, binary);
while(buffer != EOF){
    //Read byte
    ++buffer;
}

性能之所以重要,仅仅是因为文件大小。

如果您想要良好的顺序访问性能(从开始到结束读取(,请使用fread()。您可以将FILE*存储在RAII:的std::shared_ptr

std::shared_ptr<FILE> file(fopen(...), fclose);

您可以忽略C++流、内存映射文件、Boost等。这些都不会比fread()更快。

由于您不关心性能,
使用ifstream的简单while循环可以一次提取一个字节:

#include <iostream>
#include <fstream>
int main(){
  std::ifstream infile("file.txt");
  while (infile){
    //get next byte
    char c;
    infile.get(c);
    //process byte
    std::cout << c;
  }
}