是否有一些情况我不得不喜欢二进制文件到文本文件?我使用C++作为编程语言?
例如,如果我要存储一些大文本文件,最好是使用文本文件还是二进制文件?
编辑
目前的文件没有要求人类可读的要求.有些性能差异,安全性差异等等?
编辑
很抱歉省略其他要求(感谢Carey Gregory)
Jam*_*nze 12
作为一般规则,定义文本格式并使用它.开发和调试要容易得多,如果它不起作用,更容易看出出了什么问题.
如果您发现文件变得太大,或者花费很多时间通过线路传输,请考虑压缩它们.压缩文本文件通常比二进制文件文件小.或者考虑一种不那么冗长的文本格式; 可以使用比XML使用的字符少得多的字符可靠地传输数据的文本表示.
最后,如果您最终不得不使用二进制文件,请尝试选择现有格式(例如Google的协议块),或者将格式基于现有格式.请记住:
二是很多比文字更多的工作,因为你实际上不得不编写所有的<<再次运营商,包括那些在标准库.
二是很多更难以调试,因为你不能很容易地看到你实际做了什么.
关于你的上次编辑:
加密后,结果将是二进制的.您可以使用二进制文件的表示形式(base64或其他类似文件),但结果不会比二进制文件更具可读性,因此不值得烦恼.如果您正在加密,在写入磁盘之前,您将自动失去文本的所有优点.
关闭电源的问题意味着您无法ofstream直接使用
.您必须打开或创建具有完整事务完整性的必要选项的文件(O_SYNC作为openUnix下的标志).您必须将每条记录作为单个write请求写入系统.
为了以防万一,有一个校验和总是一个好主意.如果你担心安全问题,SHA1是个不错的选择.但请记住,如果有人有权访问该文件,并且想要有意更改它,他们可以重新计算SHA1并插入新值.
所有文件都是二进制; 其中的数据是某些信息的二进制表示.如果必须存储大量文本,则该文件将包含该文本的二进制表示."二进制文件"和"文本文件"之间的区别在于创建后者涉及在保存之前将数据转换为文本形式.这通常是为了让人们可以阅读它.
二进制文本和文本之间的区别通常在存储用于计算机消费的数据时进行.通常,此数据不是文本 - 它可能是数字配置值的列表,例如:1, 2, 3.
如果以文本格式存储它,您的文件可能包含人类可读数字的列表,如果您在记事本中打开文件,则每行可能会看到一个数字.但是你实际上在这里保存的不是二进制值1, 2, 3- 你要保存一个字符串"1\n2\n3\n".请注意,此字符串长度为6个字符,二进制值(假设为ASCI)实际上是49, 10, 50, 10, 51, 10!
如果相同的数据以二进制格式存储,则将数字存储在最小的有用空间中,并将文件写为单独的字节,通常只能由创建它们的代码读取.在记事本中打开此文件可能会显示垃圾字符,因为数据没有任何意义作为文本.在这种情况下,您将保存具有实际值的字节数组{ 1, 2, 3 }- 甚至是嵌入了三个值的单个字节.这可能比人类可读的等效物小得多.
二进制文件像所有其他文件一样存储字节序列。您可以存储数字值,例如每 4 个字节的整数、每单个字节的字符,甚至是序列化的类对象以及您想要的任何内容。
当您知道如何读取二进制文件时(即您知道其中存储了什么),您就可以从中提取所有信息。但是,文本文件使用 UTF8、ANSI 等文本编码,它们旨在对文本编辑器要处理的文本字符进行编码。