ifstream与fread的二进制文件

Sno*_*ish 5 c++ file-io ifstream fread

哪个更快?ifstreamfread
我应该使用哪个读取二进制文件?

fread()将整个文件放入内存。
因此fread,访问之后,访问它创建的缓冲区很快。

是否ifstream::open()将整个文件放入内存?
还是我们每次运行都会访问硬盘ifstream::read()

所以... ifstream::open()== fread()吗?
或(ifstream::open(); ifstream::read(file_length);)== fread()

还是我应该使用ifstream::rdbuf()->read()

编辑: 我的readFile()方法现在看起来像这样:

void readFile()
{
    std::ifstream fin;
    fin.open("largefile.dat", ifstream::binary | ifstream::in);
    // in each of these small read methods, there are at least 1 fin.read()
    // call inside.
    readHeaderInfo(fin);
    readPreference(fin);
    readMainContent(fin);
    readVolumeData(fin);
    readTextureData(fin);
    fin.close();
}
Run Code Online (Sandbox Code Playgroud)

小方法中的多个fin.read()调用会降低程序速度吗?我应该只在main方法中使用1 fin.read()并将缓冲区传递给较小的方法吗?我想我要写一个小程序进行测试。

谢谢!

Chr*_*ica 5

您真的确定fread将整个文件放入内存中吗?可以缓冲文件访问,但我怀疑您是否真的将整个文件放入内存中。我认为ifstream::read只是fread在幕后使用更符合 C++ 的方式(因此是从 C++ 中的文件读取二进制信息的标准方式)。我怀疑是否存在显着的性能差异。

要使用fread,必须打开文件。它不仅仅需要一个文件并立即将其放入内存。所以ifstream::open == fopenifstream::read == fread

  • @Neil 我希望现在结束这个讨论。我只是想说不要半真半假。当然,`fread` 可以读取整个文件,但`ifstream::read` 可以完全相同。我知道你总是可以而且应该衡量事物,这就是为什么我说“怀疑”而不是“知道”。 (3认同)