2012-03-25 51 views
2

以下是我为获取此错误而采取的步骤。UTF-8的java.lang.NumberFormatException字符串字符串

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,它是一个单独的数字字符串

+3

您是否在解析它之前尝试修整字符串? – Perception 2012-03-25 14:20:18

+2

什么'move_received'包含字符? – 2012-03-25 14:20:46

+1

您是否试图查看'move_received'包含的内容? – AlexR 2012-03-25 14:21:16

回答

4

您应该使用getBytes("UTF-8")代替。

没有看到trim解决它的评论,但仍然 - 添加一些信息。

getBytes返回系统默认字符集中的字符串,所以这可能会导致字符串出现乱码。

然而,由于你的String仅包含数字 - 和数字是ASCII范围内 - 这不应该使你有问题 - 因为大多数字符集,像ISO-XXXX是单字节字符集和UTF-8使用一个字节表示ASCII字符以及。

无论如何,这对未来都是好的做法。

0

使用ObjectOutputStream发送数据和ObjectInputStream来读取数据。然后,您可以以任何格式发送数据,包括字符串,整数或您选择的任何其他格式。

事实证明,我昨天回答了一个有点相关的问题,并给出了一些示例代码。您可能会发现示例代码也很有用。请参阅Cannot communicate with server in Java

相关问题