c++ - 二进制与文本模式下的文件操作——性能问题

标签 c++ c file-io

在很多项目中,我看到数据对象/结构以二进制方式写入文件,然后再以二进制方式从文件中取回。

我想知道为什么他们用二进制模式来做?文本模式和二进制模式之间有什么性能差异?如果不是,那么什么时候使用二进制模式或文本模式?

最佳答案

二进制更快。考虑一个以 32 位(4 字节)存储的整数,例如 123456。如果您将其写为二进制(这就是它在计算机中的表示方式),则需要 4 个字节(忽略项目之间的填充以便在结构中对齐) ).

要将数字写为文本,必须将其转换为字符串(一些转换开销和内存存储),然后将其写出,至少需要 6 个字节,因为有 6 个字符要表示号码。这不包括任何额外的填充,例如用于对齐的空格或用于读取/分隔数据的定界符。

现在,如果你认为你有几千个项目,额外的时间会加起来并需要更多的空间,这将需要更长的时间来读入,然后还有额外的时间在你有之后转换回二进制文件进行存储将值读入内存。

文本的优势在于,人们更容易阅读,而不是尝试读取二进制数据或数据的十六进制转储。

关于c++ - 二进制与文本模式下的文件操作——性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11981434/

相关文章:

c++ - 无法使用 std::future 来存储多态对象

c++ - 想在 Qt 中存储配置文件,使用 SQLite 或其他东西?

c - 在c中使用socket选择阻塞

c - "."真的是 _wfopen_s/_wfindfirst 允许的通配符吗?

C++ 输出格式错误

c++ - 如何从 lambda 表达式中获取函数指针?

c++ - 如何将 char 数组作为对函数和 memcpy 的引用传递

c - 在C程序中,如果在两个具有不同实现的不同库中定义了相同功能,会发生什么情况?

c - fscanf 在 C 中从文件中复制一行两次

c - 如何在c中将文件从一个目录移动到另一个目录?