2016-09-24 75 views
2

读取10GB二进制文件并解析每个字节而不使用boost库的最简单方法是什么?迭代10GB +二进制文件

及其与流如此混乱,文件,内存映射文件等

我真的只是想是这样的:

char* buffer = read(filename, binary); 

while(buffer != EOF){ 
    //Read byte 
    ++buffer; 
} 

性能此事确实只是由于文件大小。

+0

std :: ifstream有什么问题? –

+0

对于简单的块我总是回到C和无缓冲FILE *处理。 – Lothar

+2

内存映射文件是最好的。 – Jichao

回答

1

结束),使用fread()。您可以在std::shared_ptrFILE*存储RAII:

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

可以忽略C++流,内存映射文件,升压,等等这些都不将比fread()更快。

+7

*“这些都不会比fread()快”* - 我们需要这种[ipsedixitism]的证据(https://en.wikipedia.org/wiki/Ipse_dixit)。有一些数字来支持你的陈述? – WhiZTiM

+1

@WhiZTiM:我已经多次测试过这些东西。任何想在自己的特定平台上100%确定自己特定用例的人都欢迎编写自己的基准测试。 –

0

当你不关心性能,
一个简单的while循环与ifstream可以一次提取一个字节:如果你想表现好顺序访问(从一开始就向着读取

#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; 
    } 

} 
+1

当然,您一次不会读取一个10 GB的输入文件。 –

+0

@JohnZwinck为什么不呢?为你做的实际I/O的代码知道得更好,并且会根据需要读取有效大小的块,除非你明确地告诉它不这样做。我可以想象大量的应用程序需要逐字节读取。 –

+1

@CareyGregory没有人会“要求”它。 – xaxxon