Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我们要用基数32或基数64来表示数据,而不是0和1?_Java_Serialization_Binary_Base64_Base - Fatal编程技术网

Java 为什么我们要用基数32或基数64来表示数据,而不是0和1?

Java 为什么我们要用基数32或基数64来表示数据,而不是0和1?,java,serialization,binary,base64,base,Java,Serialization,Binary,Base64,Base,我最近编写了一个程序,对一些数据(java对象)进行序列化,并将结果字符串保存在文本文件中。信息在base 64中序列化,因此数据最终显示如下: RO0ABXBWCHBWCHBWCHBWCHBWCHBWCHBWCHBWCHBWCHBZCGAAB3JNLMJ1A2TPDC51DGLSLmlLllDYYXBWZXLYUEFS8RJVBQIA 然而,我多少理解了base 64的含义,因为这是胡言乱语,为什么文本文件或计算机从一开始就不显示0和1呢?如果我正确理解了底层过程,那么计算机上的所有信息都以0

我最近编写了一个程序,对一些数据(java对象)进行序列化,并将结果字符串保存在文本文件中。信息在base 64中序列化,因此数据最终显示如下:

RO0ABXBWCHBWCHBWCHBWCHBWCHBWCHBWCHBWCHBWCHBZCGAAB3JNLMJ1A2TPDC51DGLSLmlLllDYYXBWZXLYUEFS8RJVBQIA


然而,我多少理解了base 64的含义,因为这是胡言乱语,为什么文本文件或计算机从一开始就不显示0和1呢?如果我正确理解了底层过程,那么计算机上的所有信息都以0和1的形式存储在某处,因为这是计算机最终存储信息的唯一方式。Base64不只是读取和解释字节的一种方式吗?为什么要让我的文本编辑器读取保存在计算机上的字节,将它们转换成字母(最终使文档对我来说更短),然后以上面的形式显示呢?尽管base 64的显示方式在视觉上更加紧凑,但无论如何,没有人能够读取base 64文本,并且文件仍然具有相同的精确大小。

Base64用于通过不理解和/或损坏8位数据的系统发送8位数据。e、 g.大多数较旧的电子邮件系统假定为7位文本,并会将您的8位电子邮件丢弃

b64/b32不打算作为存储格式。他们浪费了大量的空间。将一个值编码到base64将使其大小平均增大33%左右。它们是传输格式,以确保8位数据完整地通过7位系统

考虑一个简单的文本序列:
abc
。假设ASCII文本,这是

0x61      0x62       0x63      (hex)
01100001  01100010   01100011  (binary)
97        98         99        (decimal)
当您的位被压缩到一个文件中时,您的位将很简单

011000010110001001100011
如果此8位字节序列通过哑7位传输介质发送,然后重新安装到8位系统,则对哪些位属于哪个字节的所有检测都将丢失。你最终会得到

0110000   1011000  1001100  011
因为接收的8位系统不知道原始数据是8位的。它将看到来自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 

与原始文本完全不同。

Base64用于通过不理解和/或损坏8位数据的系统发送8位数据。e、 g.大多数较旧的电子邮件系统假定为7位文本,并会将您的8位电子邮件丢弃

b64/b32不打算作为存储格式。他们浪费了大量的空间。将一个值编码到base64将使其大小平均增大33%左右。它们是传输格式,以确保8位数据完整地通过7位系统

考虑一个简单的文本序列:
abc
。假设ASCII文本,这是

0x61      0x62       0x63      (hex)
01100001  01100010   01100011  (binary)
97        98         99        (decimal)
当您的位被压缩到一个文件中时,您的位将很简单

011000010110001001100011
如果此8位字节序列通过哑7位传输介质发送,然后重新安装到8位系统,则对哪些位属于哪个字节的所有检测都将丢失。你最终会得到

0110000   1011000  1001100  011
因为接收的8位系统不知道原始数据是8位的。它将看到来自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 

与原文完全不同。

这不清楚。你是在问为什么你的文本编辑器没有将文件显示为0和1的序列?如果我的问题不太清楚,请道歉。我理解文本编辑器显示字母和数字是因为它被告知要这样做,我的问题是,如果我们无论如何都无法阅读,为什么我们首先要麻烦告诉文本编辑器以字母顺序显示字节集合。我希望这更有意义!这还不清楚。你是在问为什么你的文本编辑器没有将文件显示为0和1的序列?如果我的问题不太清楚,请道歉。我理解文本编辑器显示字母和数字是因为它被告知要这样做,我的问题是,如果我们无论如何都无法阅读,为什么我们首先要麻烦告诉文本编辑器以字母顺序显示字节集合。我希望这更有意义!很有趣,谢谢你的回答!为什么将信息转换为base64格式会放大其大小?存储的信息和字节不是一样吗?不能包含任意8位数据的更现代的格式示例包括XML和JSON。因为它们可以合并任意文本数据,所以base64用于将二进制文件转换为文本。@MagnusQ是的,它是相同的数据,但不是相同的字节。普通字节有256种可能性(因此允许每个值打包8位),base64选择64个可能传输良好的字节(因此允许每个值打包6位)。三个二进制字节变成四个base64字符。base64=6位。将8位字节转换为6位字节意味着您必须添加额外字符以保留溢出位。这意味着33%的开销。很有趣,谢谢你的回答!为什么将信息转换为base64格式会放大其大小?存储的信息和字节不是一样吗?不能包含任意8位数据的更现代的格式示例包括XML和JSON。因为它们可以合并任意文本数据,所以base64用于将二进制文件转换为文本。@MagnusQ是的,它是相同的数据,但不是相同的字节。普通字节有256种可能性(因此允许每个值打包8位),base64选择64个可能传输良好的字节(因此允许每个值打包6位)。三个二进制字节变成四个base64字符。base64=6位。将8位字节转换为6位字节意味着您必须添加额外字符以保留溢出位。这相当于33%的开销。