微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ifstream与fread的二进制文件

如何解决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;
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。