1

标题说明了一切。基本上我使用 TCP 进行客户端-服务器设置,我想知道在通过 tcp 发送数据之前将字符串转换为二进制是否有优势?

4

3 回答 3

2

字符串是二进制数据,或者至少可以很容易地转换成这样的,byte[],用

static byte[] GetStringBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

如果您压缩/编码您发送的数据,无论它是作为字符串还是二进制数据开始,您很可能会发送相同的总字节数。

于 2013-03-12T20:14:38.883 回答
1

在绝大多数情况下没有真正的优势。此外,二进制数据往往更依赖于平台,因此如果您想将客户端/服务器扩展到多平台环境,您最好还是坚持使用字符串。

于 2013-03-12T20:16:16.697 回答
1

有些数据以二进制编码,例如DER

如果您的应用程序需要发送这些类型的数据,您可以直接发送二进制文件。例如CA 的证书。如果您将其作为base64之类的字符串发送,则需要更大的大小来表示它

在某些较低级别,如 TCP,由于大小、性能和容错性,两个实体之间共享信息(握手)使用二进制。

但是作为一个需要敏捷发展的应用程序开发人员,除了大小之外,还有很多事情需要考虑,比如兼容性和维护。假设您需要用二进制数据响应一些元数据,您可能需要使用 JSON 来表示:

{
  "version": 1,
  "data": "base64 encoded data"
}

对客户来说事情会变得更容易,因为有大量工具可以帮助解析 JSON,并且当您无需工具即可查看数据(人类可读)时,调试起来会更容易。另一方面,二进制编码(如 DER)你必须升级你的协议文档,让客户可以轻松地将他们的代码升级为新格式,你还需要考虑向后/向前兼容。

虽然有一些工具可以帮助二进制编码更加兼容和可维护,例如Apache ThriftProtocol BufferApache Avro

深入研究性能方面。除非您正在比较有无编码/解码过程(这很容易比较哪个更好)。你必须做一些负载测试来检查它。

例如,有一些速度极快的 JSON 解析器,它可以轻松击败一些声称性能比其他解析器更好的二进制解析器。

于 2022-01-06T05:50:13.200 回答