0

我想构建一个接受完全独立于平台的 TCP 流的 Java 服务器,以便客户端可以用任何其他语言编写,如 C++、PHP、ActionScript 或其他任何语言。

但是,当我想向流中写入不同的原语(如 int、short 等)时,我必须注意正确的整数长度以及整数是有符号还是无符号。这是一个问题,因为整数字节长度在不同平台之间变化很大,例如 PHP 整数在 32 位和 64 位机器上具有不同的大小。

出于这个原因,只发送文本而不发送整数值可能是合理的,因为如果文本使用相同的字符集和字节顺序,每台机器都会以相同的方式解释文本。因此,如果服务器应该读取与平台无关的数据,它只能使用 DataInputStream.readUTF()。

我不确定我的论点是否正确,但如果我错了,请纠正我。

4

2 回答 2

1

虽然您可以发送文本,但不应使用 writeUTF/readUTF,因为这是一种特定格式。即无符号short长度后跟UTF 字符。

可以使用 text 的原因是因为您希望一次解析每个字节,您可以对二进制执行完全相同的操作(而且通常要快得多)

最大的区别是文本更容易阅读和调试。仅出于这个原因,我建议您的第一个协议文本基于。只有当您更有信心可以调试协议错误时,我才会建议使用二进制协议。

于 2013-06-11T11:20:46.473 回答
1

甚至 DataInputStream.readUTF() 也不是通用功能。它使用相当复杂的编码。

查找已经拥有大多数流行语言的客户端库的数据格式,例如ThriftProtocol Buffers

于 2013-06-11T11:26:19.877 回答