在某些情况下我必须更喜欢二进制文件而不是文本文件吗?我使用 C++ 作为编程语言?
例如,如果我必须存储一些大文本文件,是使用文本文件还是二进制文件更好?
编辑
目前该文件没有人类可读的要求。是否有一些性能差异、安全差异等?
编辑
抱歉省略了其他要求(感谢 Carey Gregory)
- 要保存的记录采用 ascii 编码
- 该文件必须加密(AES)
- 机器可以随时断电。所以我必须尽量防止错误。
- 我必须知道文件是否在程序之外更改,我想我会使用文件的 sha1 摘要。
原文由 Elvis Dukaj 发布,翻译遵循 CC BY-SA 4.0 许可协议
作为一般规则,定义文本格式并使用它。开发和调试要容易得多,如果它不起作用,也更容易看出哪里出了问题。
如果您发现文件变得太大,或者通过网络传输需要很长时间,请考虑压缩它们。压缩的文本文件通常比二进制文件小。或者考虑一种不那么冗长的文本格式;可以使用比 XML 使用的字符少得多的字符可靠地传输数据的文本表示。
最后,如果您最终不得不使用二进制文件,请尝试选择现有格式(例如 Google 的协议块),或者将您的格式建立在现有格式的基础上。请记住:
二进制比文本 要 多得多,因为实际上您必须再次编写所有
<<
运算符,包括标准库中的运算符。二进制文件更难调试,因为你不能轻易看到你实际做 了 什么。
关于您的最后一次编辑:
加密后,结果将是二进制的。您可以使用二进制的文本表示(base64 或类似的),但结果不会比二进制更具可读性,因此不值得费心。如果您正在加密过程中,在写入磁盘之前,您会自动失去文本的所有优势。
关于关机的问题意味着您 不能 直接使用
ofstream
。您必须使用必要的选项打开或创建文件以实现完整的事务完整性(O_SYNC
作为open
在 Unix 下的标志)。您必须将每条记录作为单个write
请求写入系统。有一个校验和总是一个好主意,以防万一。如果您担心安全性,SHA1 是一个不错的选择。但请记住,如果有人有权访问该文件,并且想要有意更改它,他们可以重新计算 SHA1 并插入新值。