ifstream与fread的二进制文件

| 哪个更快?
ifstream
fread
。 我应该使用哪个读取二进制文件?
fread()
将整个文件存储到内存中。 因此,在
fread
之后,快速访问它创建的缓冲区。
ifstream::open()
是否将整个文件放入存储器? 还是每次我们执行
ifstream::read()
都会访问硬盘? 那么...
ifstream::open()
==
fread()
吗? 或(
ifstream::open(); ifstream::read(file_length);
)==
fread()
? 还是我用use10ѭ? 编辑: 我的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()并将缓冲区传递给较小的方法吗?我想我要写一个小程序进行测试。 谢谢!     
已邀请:
您真的确定“ѭ1”将整个文件存入内存吗?文件访问可以缓冲,但是我怀疑您是否真的将整个文件放入内存中。我认为
ifstream::read
只是在幕后以更符合C ++的方式使用
fread
(因此是从C ++文件中读取二进制信息的标准方式)。我怀疑是否存在明显的性能差异。 要使用
fread
,必须打开文件。它不仅需要一个文件,而且可以立即将其放入内存。所以
ifstream::open == fopen
ifstream::read == fread
。     
至于哪个更快,请看我的评论。对于其余的: 这两种方法都不会自动将整个文件读入内存。他们都阅读了您指定的内容。 至少对于“ 0”,我确信IO已被缓冲,因此您进行的每次读取都不一定有磁盘访问权限。 有关读取二进制文件的C ++方式,请参见此问题。     
如果您使用高级api,则C ++流api通常比C文件api慢一点,但它提供的清洁器/安全api则比C更加安全。 如果您想提高速度,请考虑使用内存映射文件,尽管对于标准库,没有可移植的方法。     
使用C ++文件流的想法是,部分或全部文件被缓冲在内存中(基于它认为最佳的缓冲),而您不必担心它。 我会用5英镑告诉你你需要多少钱。     
使用流运算符:
DWORD processPid = 0;
std::ifstream myfile (\"C:/Temp/myprocess.pid\", std::ios::binary);
if (myfile.is_open())
{
    myfile >> processPid;
    myfile.close();
    std::cout << \"PID: \" << processPid << std::endl;
}
    

要回复问题请先登录注册