【问题标题】:Binary vs. String transfer over a stream流上的二进制与字符串传输
【发布时间】:2011-12-05 12:38:54
【问题描述】:

我正在用 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 -> 二进制传输和字符串传输有什么区别?

【问题讨论】:

  • 你问了多少问题!?
  • @Mob,我只是很困惑,实际上这是一个问题,有什么区别?我只是将问题分解为更清楚。如果你愿意,会转述。

标签: java string binary websocket file-transfer


【解决方案1】:

当您使用二进制模式时,在发送数据之前不会对数据进行 UTF-8 转换。就速度而言,几乎没有区别,因为文本的 UTF-8 编码非常快且可以忽略不计。看起来他们为您提供了两个选项,因此您可以根据要发送的数据类型以任何一种方式发送该数据。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 接收到的字节可以直接访问:对于所有客户端,如 android (okhttp3) 和 ios (starscream) 都是如此。..
    猜你喜欢
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2021-11-09
    • 2011-05-09
    • 2012-08-27
    • 2017-03-22
    相关资源
    最近更新 更多