【发布时间】:2015-12-15 14:49:40
【问题描述】:
我有一个二进制文件,我在其中保存了数百万次以下变量:
- x 大小的浮点向量
- 两个无符号整数
目前我正在使用 ifstream 来打开和读取文件,但我想知道是否可以通过将整个文件加载到内存中并减少 I/O 来加快执行时间。
如何将文件加载到内存中,然后将其转换为我想要的变量?使用 ifstream 可以轻松完成,但我不知道如何对其进行缓冲然后提取数据。
这是我用来保存数据的代码:
osfile.write(reinterpret_cast<const char*> (&sz), sizeof(int));// Size of vector
osfile.write(reinterpret_cast<const char*> (&vec[0]), sz*sizeof(float));
osfile.write(reinterpret_cast<const char*> (&a), sizeof(unsigned int));
osfile.write(reinterpret_cast<const char*> (&b), sizeof(unsigned int));
【问题讨论】:
-
前一周有人问了一个类似的问题,我想归结为使用
ifstream#rdbuf,我看看能不能找到问题。 -
我见过类似的问题,将文件作为字符数组获取。但是我应该如何从这个数组中读取变量呢?
-
这个向量大小是固定的,还是每个向量都不同?
-
人们,请停止做这样的事情:“osfile.write(reinterpret_cast
(&vec[0]), vec.size()*sizeof(float));”使用适当的序列化范例,不要编写 blob。 Blob 容易出错,而且不安全。 -
向量是固定大小的,我知道向量的大小,因为文件中保存的第一件事是一个 int,它是向量的大小。即使我有这样一个特定的文件也有问题吗?
标签: c++ buffer binaryfiles ifstream