哪个更快? ifstream
或 fread
。
我应该使用哪个来读取二进制文件?
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 == fopen
和 ifstream::read == fread
。
关于c++ - 二进制文件的 ifstream 与 fread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131307/