哪个更快? 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()并将缓冲区传递给小方法吗?我想我打算写一个小程序进行测试。
谢谢!
答案 0 :(得分:3)
你真的确定fread
将整个文件放入内存吗?文件访问可以缓冲,但我怀疑你真的把整个文件放入内存。我认为ifstream::read
只是以更符合C ++的方式使用fread
(因此是从C ++文件中读取二进制信息的标准方法)。我怀疑是否存在显着的性能差异。
要使用fread
,必须打开该文件。它不仅仅需要一个文件并立即将其放入内存。所以ifstream::open == fopen
和ifstream::read == fread
。
答案 1 :(得分:2)
哪个更快,请参阅我的评论。其余的:
ifstream
我确信IO是缓冲的,因此每次读取都不一定会有磁盘访问权。答案 2 :(得分:1)
答案 3 :(得分:0)
C ++文件流的想法是将部分或全部文件缓存在内存中(基于它认为最佳的文件)并且您不必担心它。
我会使用ifstream::read()
并告诉它你需要多少。
答案 4 :(得分:0)
使用流操作符:
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;
}