我正在学习 C 中的 FileIO,并且对二进制文件有点困惑。我的问题是,当我们总是可以使用 ASCII 或其他易于理解的格式的文件时,拥有二进制文件有什么用。二进制文件在哪些应用程序中更有用?对此真的有任何帮助。谢谢!
6 回答
所有文件本质上都是二进制文件。ASCII 文件是包含被认为是“人类可读”数据的二进制文件的子集。纯二进制文件不限于可读的字符子集。
访问速度
混淆
无需创建大型序列化文件即可将本机对象写入文件的能力。
ASCII 很容易被人类理解,但对于许多其他目的,计算机以二进制格式存储东西更有效、更容易。例如,如果您想保留一个整数序列,那么计算机读取/写入表示 所需的 4 个字节int
比写出数字的 ascii 表示,然后在读取时解析它更容易。
可以存储任何字节值至关重要,例如程序是二进制的。任何可能的二进制代码都可以是 CPU 的程序指令。
ASCII 只存储 7 位值,因此有一半可能的值被浪费了。
此外,整数将存储为什么?
数字 4294967295 可以存储为 4 个字节,32 位,但如果以 ASCII 格式存储,作为数字,则需要 10 个字符。此外,还需要处理将其转换为 32 位数字。这两件事都不好。
32bit的数字是固定大小的,所以很容易得到文件中的第234856个值,只要寻找到4*234856的位置即可。
如果将 32 位数字存储为 ASCII,则它们必须始终占用 10 个字节,使文件大 2.5 倍,或者它们以可变大小存储,使得几乎不可能在不读取整个文件的情况下查找特定值。
编辑:
值得补充的是(在正常使用中)人类看不到文件中保存的数据。检查文件内容的唯一方法是运行可以读取和使用数据的程序。因此,人类的便利性是一个很小的考虑因素。
一般来说,数据以最方便程序使用的形式存储,并且该形式旨在适应程序的目的。ASCII 是一种为文本编辑程序设计的格式,用于创建人类可读的文档并支持简单的文本显示方式,仅限于英文字母、数字和一些标点符号。当我们想要支持所有人类书面语言时,ASCII 的局限性太大了。
我相信我们有超过一百万个字符来表示人类书面语言(和一些其他图片),但我们还没有为所有人类语言提供字符。
UTF-8 是一种将我们目前所拥有的书面字符表示为多个字节的方法。UTF-8 使用 8bit 编码,超出了 ASCII 的范围。
将二进制文件视为数据的真实表示,由计算机程序直接解释而不是由人类读取。程序写出数据(无论是 ascii 还是 ascii 格式的数字)都会产生很多开销。最有可能的是,程序员必须发明一种协议,以将数组、结构和标量以 ascii 形式写入文件,以便人类可读,也可以由程序读回并转换回二进制形式。
数据库表就是一个很好的例子。无论表中是否有文本或数字字段,数据库管理器都会以二进制格式读取和写入该数据。更容易写出、读入,然后根据需要进行转换以显示您可以读取的任何数据。
Perception 给出了一个我以前从未考虑过的好答案。所有数据都是二进制的,ascii 是一个子集。这个答案让我想到了 ftp 并将模式设置为 ascii 或二进制。如果我正在传输存储在 Linux 系统上的 Windows 二进制文件,我会告诉 ftp 将它们作为二进制文件传输。这意味着,不要将其解释为 ascii 文件并在每行末尾添加 \cr。有时我会将 .csv 和 .txt 数据作为二进制文件传输,因为我知道 Windows Excel 知道如何解释这些非 DOS 文件。
我不想编写一个必须编码/解码图像、音频文件、GIS 数据、航天器遥测或 <fill in the blank> 作为 ASCII 的程序。