2012-03-25 16 views
2

Hier sind die Schritte, die ich unternommen habe, um diesen Fehler zu erhalten.java.lang.NumberFormatException für UTF-8 String

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

Ich versuche einfach, eine ganze Zahl über einen Sockel zu senden. Vielleicht gibt es einen besseren Weg? Ich möchte immer noch wissen, warum dieser Fehler auftritt, denn wenn ich die Zeichenfolge move_received drucke, ist es eine einzelne Ziffernfolge

+3

Haben Sie versucht, die Zeichenfolge zu trimmen, bevor Sie sie analysieren? – Perception

+2

Und was enthält 'move_received' von Zeichen? –

+1

Haben Sie versucht zu sehen, was 'move_received' enthält? – AlexR

Antwort

4

Sie sollten stattdessen getBytes("UTF-8") verwenden.

Ich habe nicht den Kommentar, dass trim es gelöst, aber immer noch - Hinzufügen von Informationen.

getBytes gibt den String im Standard-Zeichensatz des Systems zurück, so dass die Zeichenfolge verzerrt werden kann.

Da jedoch Ihre String nur Ziffern enthalten - und Ziffern sind in der ASCII Bereich - das ist nicht das Problem verursachen, sollten Sie hatte - da die meisten charsets wie ISO-XXXX sind ein Byte charsets und UTF-8 für die ASCII-Zeichen ein Byte mit auch.

In jedem Fall ist es eine gute Praxis für die Zukunft.

0

Verwenden Sie einen ObjectOutputStream zum Senden der Daten und einen ObjectInputStream zum Lesen der Daten. Dann können Sie die Daten in einem beliebigen Format senden, einschließlich String, Integer oder was auch immer Sie wählen.

Es stellt sich heraus, dass ich gestern eine etwas verwandte Frage beantwortete und einen Beispielcode gab. Sie könnten den Beispielcode auch nützlich finden. Siehe Cannot communicate with server in Java

Verwandte Themen