2012-03-25 6 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を出力すると1桁の文字列を出力するので、なぜこのエラーが発生するのか知りたいです。

+3

文字列を解析する前にトリミングしてみましたか? – Perception

+2

そして、 'move_received'は文字を何から含んでいますか? –

+1

あなたは 'move_received'に何が入っているのか見てみましたか? – AlexR

答えて

4

代わりにgetBytes("UTF-8")を使用してください。

trimが解決しましたが、まだ情報を追加していないというコメントはありませんでしたか?

getBytesは、システムのデフォルトの文字セット内の文字列を返します。文字列が文字化けする可能性があります。しかし

、あなたのStringは数字だけを含んでいるので - と数字がASCII範囲内にある - これはあなたが持っていた問題が発生することはありません - ISO-XXXXのようなほとんどの文字セットは、1つのバイト文字セットとUTF-8であるため、1つのバイトを使用して、ASCII文字を表し同じように。

いずれにしても、将来的には良い習慣です。

0

ObjectOutputStreamを使用してデータを送信し、ObjectInputStreamを使用してデータを読み取ります。次に、String、Integerなどの任意の形式でデータを送信できます。

私は多少関連した質問に昨日答えて、いくつかの例のコードを与えました。サンプルコードも便利です。 Cannot communicate with server in Java

関連する問題