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

时间:2011-10-11 17:50:41

标签: java string binary websocket file-transfer

我正在尝试使用WebSockets和Java。显然,根据WebSocket的最后草案,消息可以是二进制或纯字符串。我使用Webbit服务器,它有两个功能:

public void onMessage(WebSocketConnection connection, String message) 

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

当您使用字节时,它实际上只是在发送之前将其转换为十六进制。至于速度。我不认为它有所作为。看起来他们给了你太多的选项,所以你可以根据你已有的数据发送数据。