以下是我为解决此错误而采取的步骤。
move_to_send = Integer.toString(b_id); // b_id >= 0 && b_id <= 8
// Send over socket
byte[] buf = move_to_send.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, ADDRESS, opp_port);
socket.send(packet);
byte[] buf = new byte[GAME_DATA.BUF_SIZE];
DatagramPacket packet = new DatagramPacket(buf, GAME_DATA.BUF_SIZE);
socket.receive(packet);
byte[] data = packet.getData();
move_received = new String(data, "UTF-8");
// Error then occurs at this line
int move = Integer.parseInt(move_received);
我只是想通过套接字发送一个整数。也许有更好的方法?我仍然想知道为什么会发生这个错误,因为如果我打印字符串 move_received 它是一个数字字符串
最佳答案
您应该使用 getBytes("UTF-8")
来代替。
没有看到 trim
解决了这个问题的评论,但仍然添加了一些信息。
getBytes
返回系统默认字符集中的字符串,因此这可能会导致字符串出现乱码。
但是,由于您的 String
仅包含数字 - 并且数字在 ASCII
范围内 - 这不会导致您遇到的问题 - 因为大多数字符集如 ISO-XXXX
是一字节字符集,UTF-8 也表示使用一字节的 ASCII 字符。
无论如何,这都是 future 的良好实践。
关于UTF-8 字符串的 java.lang.NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9860846/