通过流的二进制与字符串传输

问题描述:

我正在做一个WebSockets和Java的实验。显然,根据WebSocket的最后一份草案,消息可以是二进制或纯字符串。我用Webbit服务器,它有两个功能:通过流的二进制与字符串传输

public void onMessage(WebSocketConnection connection, String message) 

public void onMessage(WebSocketConnection connection, byte[] message) 

我不知道有差别。字节[]是否更快?或者为什么这很重要?我可以写所有我写的字节,因为即使一个字符串在传输过程中被组成字节,那么为什么我们有两个多重方法?只有Google Chrome 15 Beta和16 Dev支持二进制传输,因此我正考虑在客户端和服务器上使用Base64编码/解码。这是唯一的区别吗?如果我只是读每个字节,将它们组成一个字符串并发送它们呢?我认为,唯一的区别是不是所有字节都是字符串字符,所以我只是在转换为字符串时添加开销?

tl; dr - >二进制传输和字符串传输有什么区别?

+1

你问了几个问题!? – Mob

+0

@Mob,我只是困惑,其实这是一个问题,有什么区别?我刚才提出的问题更加清楚。如果你愿意,你会解释一下。 – Mustafa

WebSocket协议(HyBi)支持两种不同的有效负载类型:文本,二进制。文本有效负载是UTF-8编码的字符串数据。您发送的字符串中任何高于127的ASCII码都将转换为两字节的UTF-8编码。要成功发送/接收原始二进制数据,您可能希望将数据编码为base64(与UTF-8兼容)之类的东西。

二进制有效载荷类型直接发送。字节在有效载荷中按原样发送。这是更高的带宽效率。这意味着您不必执行编码/解码步骤。您发送的字节直接发送,并且您收到的字节可以直接访问而不需解码。

当您使用字节时,它实际上只是在发送它之前将其转换为十六进制。至于速度。我不认为这有什么不同。它看起来像他们给你太多的选择,所以你可以用任何方式发送数据,这取决于你已经有了什么数据。