我最近写了一个序列化一些数据(java对象)的程序,并将结果字符串保存在文本文件中。信息在base 64中序列化,因此数据最终看起来像这样:
rO0ABXBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAab3JnLmJ1a2tpdC51dGlsLmlvLldyYXBwZXLyUEfs8RJvBQIA。
我有点理解base 64的意思,但是,因为这是胡言乱语,为什么文本文件或计算机从一开始就显示0和1?如果我正确理解了基础过程,那么计算机上的所有信息都会以0和1的形式存储在某处,因为这是计算机最终存储信息的唯一方式。 base 64不仅仅是一种读取和解释字节的方法吗?为什么要让我的文本编辑器读取保存在计算机上的字节,将它们转换为字母(最终使文档更短)然后在上面的表单中显示它?即使base 64导致以视觉上更紧凑的方式显示信息,但无论如何都没有人可以读取基本64文本,并且文件仍然具有相同的确切大小。
答案 0 :(得分:5)
Base64用于通过不理解和/或破坏8位数据的系统发送8位数据。例如大多数旧版电子邮件系统都假定为7位文本,并且会丢弃您的8位电子邮件。
b64 / b32不是存储格式。他们大量浪费了空间。将值编码到base64中将使其大小平均增加约33%。它们是TRANSMISSION格式,以确保您的8位数据完整地通过7位系统。
考虑一个简单的文本序列:abc
。假设是ASCII文本,那就是
0x61 0x62 0x63 (hex)
01100001 01100010 01100011 (binary)
97 98 99 (decimal)
当一起卡在一个文件中时,你的位将只是
011000010110001001100011
如果这个8比特字节的序列通过一个愚蠢的7比特传输介质发送,然后重新设置到一个8比特系统,那么所有比特属于哪个字节的感觉都将丢失。你最终得到了
0110000 1011000 1001100 011
因为接收8bit系统不知道原始数据是8bit。它会看到来自7位系统的位,并将这些位分成7位序列。现在你的价值已经被哄骗了:
0110000 1011000 1001100 011 (binary)
48 88 88 corrupt/missing bits (decimal)
30 58 58 corrupt/missing bits (hex)
这些值对应于ASCII字符
RS X X
并且与原始文本完全不同。