Java 在将int与数据报一起发送后,从字符串解析int时出现异常

Java 在将int与数据报一起发送后,从字符串解析int时出现异常,java,parsing,integer,datagram,Java,Parsing,Integer,Datagram,我开始觉得自己真的很蠢——希望这个问题有个简单的答案 我试图通过UDP发送点对象的坐标。发送效果非常好: public void send(Point p) throws IOException { String data = Integer.toString(p.x) + " " + Integer.toString(p.y); InetAddress IPAddress = InetAddress.getByName(this.remoteHost);

我开始觉得自己真的很蠢——希望这个问题有个简单的答案

我试图通过UDP发送点对象的坐标。发送效果非常好:

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);
String[] parts = data.split(" ");
int x = Integer.parseInt(new String(parts[0]));
int y = Integer.parseInt(new String(parts[1]));
正如您可能看到的,我正在发送字符串“xy”,例如“329456”。我现在需要将这些值解析为整数,以便在另一端使用它们:

byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
this.socket.receive(receivePacket);
String[] parts = data.split(" ");
int x = Integer.parseInt(new String(parts[0]));
int y = Integer.parseInt(new String(parts[1]));
但这给了我一个y整数的NumberFormatException(“对于输入字符串:'456')。为什么?这里有我遗漏的东西吗?我一直在考虑发送字符的实际编码-这可能是Integer无法理解该值的原因吗


谢谢你的帮助

我猜在将数据包转换为
字符串时,您没有考虑数据包的长度

您应该按照以下步骤进行操作:

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");

你是用这种方式读取数据的吗

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

你试过调试吗?在尝试解析int之前,
parts[0]
parts[1]
的值是多少?打印部分[1]中可能有一些额外字符,请确保它是整数