文件二进制与文本

新手上路,请多包涵

在某些情况下我必须更喜欢二进制文件而不是文本文件吗?我使用 C++ 作为编程语言?

例如,如果我必须存储一些大文本文件,是使用文本文件还是二进制文件更好?

编辑

目前该文件没有人类可读的要求。是否有一些性能差异、安全差异等?

编辑

抱歉省略了其他要求(感谢 Carey Gregory)

  • 要保存的记录采用 ascii 编码
  • 该文件必须加密(AES)
  • 机器可以随时断电。所以我必须尽量防止错误。
  • 我必须知道文件是否在程序之外更改,我想我会使用文件的 sha1 摘要。

原文由 Elvis Dukaj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 495
2 个回答

作为一般规则,定义文本格式并使用它。开发和调试要容易得多,如果它不起作用,也更容易看出哪里出了问题。

如果您发现文件变得太大,或者通过网络传输需要很长时间,请考虑压缩它们。压缩的文本文件通常比二进制文件小。或者考虑一种不那么冗长的文本格式;可以使用比 XML 使用的字符少得多的字符可靠地传输数据的文本表示。

最后,如果您最终不得不使用二进制文件,请尝试选择现有格式(例如 Google 的协议块),或者将您的格式建立在现有格式的基础上。请记住:

  • 二进制比文本 多得多,因为实际上您必须再次编写所有 << 运算符,包括标准库中的运算符。

  • 二进制文件更难调试,因为你不能轻易看到你实际做 什么。

关于您的最后一次编辑:

  • 加密后,结果将是二进制的。您可以使用二进制的文本表示(base64 或类似的),但结果不会比二进制更具可读性,因此不值得费心。如果您正在加密过程中,在写入磁盘之前,您会自动失去文本的所有优势。

  • 关于关机的问题意味着您 不能 直接使用 ofstream 。您必须使用必要的选项打开或创建文件以实现完整的事务完整性( O_SYNC 作为 open 在 Unix 下的标志)。您必须将每条记录作为单个 write 请求写入系统。

  • 有一个校验和总是一个好主意,以防万一。如果您担心安全性,SHA1 是一个不错的选择。但请记住,如果有人有权访问该文件,并且想要有意更改它,他们可以重新计算 SHA1 并插入新值。

原文由 James Kanze 发布,翻译遵循 CC BY-SA 3.0 许可协议

所有文件都是二进制文件;其中的数据是某些信息的二进制表示。如果您必须存储大量文本,则该文件将包含该文本的二进制表示。 “二进制文件”和“文本文件”之间的区别在于创建后者涉及在保存数据之前将数据转换为文本形式。通常这样做是为了让人类可以阅读它。

在存储供计算机使用的数据时,通常会区分二进制和文本。通常,此数据 不会 是文本 - 它可能是数字配置值列表,例如: 1, 2, 3

如果您以文本格式存储它,您的文件可能包含人类可读的数字列表,如果您在记事本中打开文件,您可能会看到每行一个数字。但是您实际上在这里保存的不是二进制值 1, 2, 3 - 您正在保存一个字符串 "1\n2\n3\n" 。请注意,此字符串长 6 个字符,二进制值(假设为 ASCI)实际上是 49, 10, 50, 10, 51, 10

如果相同的数据以二进制格式存储,您会将数字存储在最小的有用空间中,并将文件作为单个字节写入,这些字节通常只能由创建它们的代码读取。在记事本中打开此文件可能会显示垃圾字符,因为数据作为文本没有意义。在这种情况下,您将保存一个包含实际值的字节数组 { 1, 2, 3 } - 甚至是嵌入三个值的单个字节。这可能比人类可读的等价物要小得多。

原文由 Dan Puzey 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题