我想知道二进制协议和文本协议之间的区别。 据我所知,二进制协议更紧凑、处理速度更快。 这是怎么回事呢?因为你必须发送相同数量的数据吗?不是吧?
例如,字符串“hello”在二进制格式下的大小会有什么不同吗?
我想知道二进制协议和文本协议之间的区别。 据我所知,二进制协议更紧凑、处理速度更快。 这是怎么回事呢?因为你必须发送相同数量的数据吗?不是吧?
例如,字符串“hello”在二进制格式下的大小会有什么不同吗?
如果你所要传输的只是文本,那么对于这两者的区别并不是很显著。但是考虑一下这些需要传输的内容:
在可读性、重新实现的易度和调试的易度方面,文本协议更好。而二进制协议更为紧凑。
然而,你可以使用像LZO或Zlib这样的库来压缩你的文本,这几乎和二进制一样紧凑(在压缩/解压缩性能上只有非常小的损失)。
您可以在此处阅读更多信息:
http://www.faqs.org/docs/artu/ch05s01.html
如果您正在使用控制位/字节,则二进制协议更好。
例如,发送消息“Hello”,在二进制中可以用0x01后跟您的消息(假设0x01是表示消息的控制字节)。
因此,在文本协议中,您发送消息:hello\ 0需要10个字节,而在二进制协议中,它将是0x01Hello\ 0,这只需要7个字节。
另一个例子,假设您想发送数字255,在文本中需要3个字节,而在二进制中只需要1个字节,即0xFF。
string helloWorld = "Hello World!";
<helloWorld type="String">Hello World!</helloWorld>
你需要清楚协议的部分和数据的部分。文本协议可以发送二进制数据,而二进制协议可以发送文本数据。
协议是消息中陈述“嗨,我能连接吗?我有一些数据,应该把它放在哪里?你有我的回复吗?太好了!谢谢,再见!”的部分。
在二进制协议中,每个转换位(可能)都要小得多。以基于文本的HTTP为例:
如果你有一个编码标准,我敢打赌你可以想出比单词“PUSH”所需的4个字节更小的字符序列。
我不会说二进制格式更快处理。如果你看一下CSV或定长文本格式,它们仍然可以被快速处理。
我认为,一切都取决于谁是最终用户。如果人类是最终用户(例如HTTP或RSS),那么除了压缩数据之外,没有必要以某种方式压缩数据。
二进制协议需要解析器/转换器,难以扩展和保持向后兼容性。在协议栈中越高,人性化的协议就越多(TCP是二进制的,因为数据包必须由路由器高速处理,但XML更加人性化)。
我认为,大小变化今天并不重要。对于你的例子,hello
在二进制格式和文本格式中将占用相同的空间,因为文本格式对于计算机来说也是“二进制”的——只有我们解释数据的方式不同而已。