【发布时间】:2021-04-10 22:51:15
【问题描述】:
我目前有以下方法将vector<int>对象写入二进制文件。
void save_config(std::string fname, std::vector<int> config) {
std::ofstream out(fname);
for (auto&& item : config)
out << item;
}
但是,我需要保存的数据大约为 60 MB,使用此功能写入大约需要 5 秒。此外,我必须为我正在运行的算法的每次迭代编写一个二进制文件,并且生成这个数量级数据的输入大小的单次迭代可能大约是 500 毫秒。
我可以掩盖算法执行时间后面的写入时间,但是由于运行时的这种差异,这并不重要。有什么办法可以改善我的save_config 功能吗?另外,我使用的是二进制文件,因为我已经准备好它是最快的写入格式;但具体格式并不重要,如果有人有其他建议,我很乐意听到。
【问题讨论】:
-
如果是二进制文件,为什么不直接使用
fwrite或out.write()写入整个向量缓冲区的内容而不写循环呢?其次,您显示的std::ofstream是以文本模式打开的,而不是二进制模式。 -
另请注意,您需要在文件中指明您已写入的项目数。如果您不知道向量有多大,您将如何阅读?如果您决定写入二进制文件,则需要考虑所有这些事情——您需要知道如何正确解释该文件,以便正确读取它。
-
out << item;写入文本,而不是二进制。您将永远无法正确读取该文件。假设您有一个带有111条目的向量,这就是您的文件包含的内容。具有 3 个1条目或两个11, 1或1, 11条目的向量都会为您提供相同的文件。 -
请注意,CPU 有大端和小端 CPU,并不是每个编译器都使用相同的
int
标签: c++ binaryfiles stdvector