与Datagram一起发送后,从String解析int时出现异常

时间:2014-09-04 12:50:12

标签: java parsing integer datagram

我开始感到非常愚蠢 - 希望这个问题得到一个简单的答案。

我正在尝试通过UDP发送Point对象的坐标。发送效果很好:

public void send(Point p) throws IOException {
        String data = Integer.toString(p.x) + " " + Integer.toString(p.y);
        InetAddress IPAddress = InetAddress.getByName(this.remoteHost);
        byte[] sendData = new byte[1024];
        sendData = data.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, this.remotePort);
        socket.send(sendPacket);
}

我可以在另一端收到数据:

byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
this.socket.receive(receivePacket);

正如您可能会看到我发送字符串“X Y”,例如“329 456”。我现在需要将这些值解析为整数,所以我可以在另一端使用它们:

String[] parts = data.split(" ");
int x = Integer.parseInt(new String(parts[0]));
int y = Integer.parseInt(new String(parts[1]));

但是这给了我y整数的NumberFormatException(“For input string:'456'”)。为什么?这里有什么我想念的吗?我一直在考虑他发送的字符的实际编码 - 这可能是为什么Integer不理解这个值的原因?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我猜您在将数据包数据转换为String时不会考虑数据包长度。

你应该按如下方式进行:

String data = new String(receivePacket.getData(), 0, receivePacket.getLength());

此外,最好在发送和接收消息时明确指定字符编码,以防止机器具有不同的默认编码时出现问题:

sendData = data.getBytes("UTF-8");
...
String data = new String(receivePacket.getData(), 0, receivePacket.getLength(), "UTF-8");

答案 1 :(得分:0)

您是否以这种方式阅读数据?

String data = new String(receivePacket.getData(), 0, receivePacket.getLength());