作为一名Web开发人员,我对二进制数据了解甚少。
如果我使用句子“ Hello world。”,将其转换为二进制文件,然后将其作为二进制文件存储在SQL数据库中,似乎 1和0会比字母占用更多的空间。在我看来,使用字母有点像使用压缩,其中一个符号代表多个。
但这真的是这样吗?
与以二进制存储等效消息相比,存储纯文本数据是否占用更少的空间?
作为一名Web开发人员,我对二进制数据了解甚少。
如果我使用句子“ Hello world。”,将其转换为二进制文件,然后将其作为二进制文件存储在SQL数据库中,似乎 1和0会比字母占用更多的空间。在我看来,使用字母有点像使用压缩,其中一个符号代表多个。
但这真的是这样吗?
与以二进制存储等效消息相比,存储纯文本数据是否占用更少的空间?
Answers:
当您H
向硬盘驱动器中写入数据时,写入头不会在盘片中刻出两条垂直线和一条水平线,而是将位01001000
1磁性编码到盘片中。
从那里开始,显而易见的是,存储纯文本数据所占用的空间与存储二进制数据所占用的空间完全相同。
纯文本可以可逆地转换为其他二进制格式。一种常见的转换是压缩,通常会导致更紧凑的表示,这意味着更少的位用于表示相同的信息。
根据您使用纯文本表示的内容,您也许可以使用不同的二进制格式来表示相同的信息。这可能会使用更多的空间,可能会使用更少的空间。
例如,数字5
和1234567
可以使用数字字符以纯文本形式表示,从而在磁盘3上产生这些位序列:
00110101 00000000
00110001 00110010 00110011 00110100 00110101 00110110 00110111 00000000
另外,您可以使用32位二进制补码:
00000000 00000000 00000000 00000101
00000000 00010010 11010110 10000111
这是的紧凑表示5
,但是的紧凑表示1234567
。
尽管实际上实际上远远少于实际使用的许多表示形式,但是实际上还有无数其他表示形式会具有不同程度的紧凑性和灵活性。
1个假设为UTF-8。字符的确切位顺序取决于您使用的是哪种特定编码。
2或确实有几种格式,编码。
3如果您想知道两端的那八个零,那么,您需要某种方式来知道数据的长度。选项基本上可以归结为一个标记(我通过一个空字节使用此标记),专用于存储长度的空间(Pascal使用一个字节存储字符串的长度)或固定大小(用于随后的两个补码)例)。
我觉得这很有趣。二进制不是您所说的1和0。
想象有一个数量,我可以通过许多不同的方式告诉您这个数量:
Nine
用英语Neuf
用法语9
用阿拉伯数字IX
罗马数字1001
用阿拉伯数字二进制on off off on
在二进制中打开/关闭high low low high
用电压或杠杆或水位或电荷表示的二进制文件...或英文单词“ high”和“ low”它们都代表同一件事。这里的要点是二进制不是1和0,这只是表示值的一种方式。
当谈到将H转换为二进制时,您可能会想象在屏幕上看到10101010-但这不是“二进制”,每个二进制位都是一位。
是的,如果您H
像人们通常所说的那样转换为“二进制”,然后用阿拉伯数字表示然后存储它,那么它将花费更多的空间,就像转换H
为aitch
需要更多空间一样。
但是您可以看到二进制是表示数量的一种方式,逻辑上说:“如果我将H转换为二进制并将其表示为3,high low high low high low high low
那么它将需要35个字符!这甚至比10101010
!但是这两个都是'binary' ..那么一个比另一个大吗?
这样做的另一边是想知道如何H
由计算机存储,并且一看就知道H
是本身只是一个代表数量的办法-同样的数量72
,01001000
或者seventy two
或ASCII字符代码H
。8bittree的回答是纯文本是二进制的,但这是我试图证明的意思。
因此,您在计算机中出现了一些模式,01001000
这是什么意思?任何东西-可以被当作数字来谈论,作为zip文件的一部分,作为字符,取决于创建它的人的意图。如果您知道它应该是纯文本,则它来自字符编码H
-> ,然后01001000
在字符编码表中以其他方式查找它-ASCII,UTF-8,shift-jis等,然后找到正确的字体角色出来一个H
或任何东西。否则,如果您使用与创建它的人不同的编码查找,那么就会出现错误的字符。这是@Eric Lippert的链接。
但是当我写这篇文章时,正如您所想的那样,它H
是一个字节且01001000
是8个字节,是的,这是更多的空间。是的,它是(二进制)表示。但这比计算机使用的抽象级别更高-二进制以ASCII字符显示,其中每个字符在后台用二进制位模式表示,每个位都与H
单独的一样大。
与以二进制存储等效消息相比,存储纯文本数据是否占用更少的空间?
没有永不。
您的计算机已经以等效的二进制表示形式存储了纯文本数据。将某些内容存储为纯文本格式还是二进制格式,仅表示计算机应如何解释相同的二进制流。
在我看来,使用字母有点像使用压缩,其中一个符号代表多个。
确实是这样。一个字符代表多个位。问题在于它们是大小不同的东西。存储1或0只需要一位,而存储纯文本字符只需8位(或更多)。使用字符不会获得任何收益。
如果有的话,您可以用其他方式压缩内容。毕竟8位是256个不同的可能值,而纯文本通常限于字母,数字和一些标点符号。它不需要尽可能多的位。