2012-03-25 2 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

+2

그리고'move_received'에는 문자가 무엇입니까? –

+1

'move_received'에 무엇이 들어 있는지 보려고 했습니까? – AlexR

답변

4

대신 getBytes("UTF-8")을 사용해야합니다.

trim이 해결했지만 아직 일부 정보를 추가하지 못했음을 알 수 없습니다.

getBytes은 시스템의 기본 charset에서 문자열을 반환하므로 문자열이 깨질 수 있습니다. 당신의 String는 숫자 만 포함하기 때문에

그러나, -와 숫자를 ASCII 범위 내 - 이것은 당신이 가지고 있던 문제가 발생하지합니다 - ISO-XXXX 같은 대부분의 캐릭터 세트는 1 개 바이트 캐릭터 세트가와 UTF-8은 한 바이트를 사용하여 ASCII 문자를 나타 내기 때문에 게다가.

어쨌든 미래에는 우수 사례입니다.

0

ObjectOutputStream을 사용하여 데이터를 보내고 ObjectInputStream을 사용하여 데이터를 읽습니다. 그런 다음 String, Integer 등 원하는 형식으로 데이터를 보낼 수 있습니다.

어제 다소 관련 질문에 답하고 몇 가지 예제 코드를 제시했습니다. 예제 코드가 유용 할 수도 있습니다. Cannot communicate with server in Java