c++ - 二进制文件的 ifstream 与 fread

标签 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();
}

小方法中的多次 fin.read() 调用会拖慢程序吗? 我应该只在 main 方法中使用 1 fin.read() 并将缓冲区传递给小方法吗?我想我要写一个小程序来测试。

谢谢!

最佳答案

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

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

关于c++ - 二进制文件的 ifstream 与 fread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131307/

相关文章:

file-io - 在 Common Lisp 中处理并发文件访问

c - fputc 不工作,将文件指针推进得太远

c++ - 在字符数组中查找路径

c++ - 我们如何确认内在矩阵是正确的?

c++ - is<thing> 等价于 char32_t

c - 返回 0/fclose/free 时出现程序段错误。我想我有内存泄漏但找不到它们。请帮忙!

c++ - 无法在头文件中声明 ifstream 类成员

c++ - 使用getline从输入文件打印时如何忽略空行

c++ - 遍历文本文件并为每一行分配变量

c++ - 带模板的友元函数