【发布时间】:2011-06-18 22:25:39
【问题描述】:
我目前正在使用 SocketServer 类用 Python 编写的服务器和使用 DatagramSocket 和 DatagramPacket 类用 Java 编写的客户端之间进行 UDP 通信试验。 服务器接受 python 方法调用作为输入,并将 stdout 和 stderr 路由回客户端,以 1024 字节大小的数据包传输。
通信正常,客户端可以从服务器接收数据包并向其发送数据包,但是在比较数据时遇到了问题。
例如,当在客户端接收到包含字符串__DONE__\n 的数据包时,使用System.out.print(packet.getData()) 可以正常打印。我只是在尝试将其与String done = "__DONE__\n" 进行比较时遇到问题,如下所示:
while (String(packet.getData()).equals(done) != true) {
doStuff();
}
这里循环永远运行,因为评估语句总是返回false。
我的猜测是它与不同的编码有关。我尝试比较数据包中的字符串和本机 Java 字符串的字节数组并得到以下结果:
String done: 5f5f444f4e455f5f0a
String(packet.getData()): 5f5f444f4e455f5fa0000000[...]
// The 0s are repeated for the whole 1024bytes of the packet
似乎数据包中的字符串包含我要比较的字节以及 1024 字节数据包中的其他字节,这就是 String.equals() 方法总是返回 false 的原因。
在从字节数组转换为字符串时,有没有办法强制 Java 省略尾随零?
【问题讨论】:
标签: java python character-encoding