文件二进制文本与文本

时间:2013-05-21 12:56:05

标签: c++ file

是否有一些情况我不得不喜欢二进制文件到文本文件?我使用C ++作为编程语言?

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

修改

目前的文件没有要求人类可读的要求。有些性能差异,安全性差异等等?

修改

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

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

6 个答案:

答案 0 :(得分:12)

作为一般规则,定义文本格式并使用它。这很多 更容易开发和调试,更容易看到是什么 如果它不起作用就会出错。

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

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

  • 二进制是一个很多比文本更多的工作,因为你实际上 必须再次编写所有<<运算符,包括那些运算符 在标准库中。

  • Binary是 lot 更难以调试,因为你不能 很容易看到你实际做了什么。

关于您的上一次修改:

  • 加密后,结果将为二进制。您可以 使用二进制文件的表示形式(base64或其他一些), 但结果不会比二进制更可读,所以 这不值得打扰。如果您正在加密, 在写入磁盘之前,您会自动丢失所有内容 文本的优点。

  • 关闭电源的问题意味着无法使用 ofstream直接。您必须使用以下命令打开或创建文件 完整交易完整性的必要选项(O_SYNC as Unix下的open标志。您必须将每条记录都写为 对系统发出单write个请求。

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

答案 1 :(得分:6)

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

二进制文本和文本之间的区别通常在存储用于计算机消费的数据时进行。通常,此数据是文本 - 它可能是数字配置值的列表,例如:1, 2, 3

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

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

答案 2 :(得分:3)

二进制文件像所有其他文件一样存储一系列字节。您可以存储数值,例如每4个字节的整数,每个字节的字符,甚至是序列化的类对象以及您想要的任何内容。

当您知道如何读取二进制文件(即您知道存储在其中的内容)时,您可以从中提取所有信息。但是,文本文件使用UTF8,ANSI等文本编码,它们用于编码由文本编辑器处理的文本字符。

答案 3 :(得分:1)

二进制文件仅供机器解释,而文本文件,人类也可以打开并解释其内容。

因此,这取决于您是否希望您的文件可被人阅读。

答案 4 :(得分:1)

这取决于很多因素。我现在可以想到两个:

  • 您是否要求文件可供人阅读?

  • 压缩是一个因素吗?一个10位数的数字至少需要10个字节作为文本,但可能只需要四个或两个二进制文件。

答案 5 :(得分:0)

存储在文本文件中的所有数据都是人类可读的图形字符。每行数据以新行字符结尾。 在二进制文件的情况下 - 数据的存储格式与存储在存储器中的格式相同。没有行或换行符。文件结束标记。

此外,二进制文件显示更高的内存效率,因为它们以零和一个存储。