java.lang.NumberFormatException для строки UTF-8 - PullRequest
2 голосов
/ 25 марта 2012

Вот шаги, которые я предпринял, чтобы получить эту ошибку.

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, то это строка из одной цифры

Ответы [ 2 ]

4 голосов
/ 25 марта 2012

Вместо этого следует использовать getBytes("UTF-8").

Не увидел комментарий, который trim решил, но все же - добавив некоторую информацию.

getBytes возвращает строку вкодировка вашей системы по умолчанию, так что это может привести к искажению вашей строки.

Однако, поскольку ваш String содержит только цифры - и цифры находятся в пределах диапазона ASCII - это не должно вызывать возникшую у вас проблему, поскольку большинство кодировок, таких как ISO-XXXX, являются однобайтовыми и UTF-8 представляет символы ASCII, использующие также один байт.

В любом случае, это хорошая практика на будущее.

0 голосов
/ 25 марта 2012

Используйте ObjectOutputStream для отправки данных и ObjectInputStream для чтения данных. Затем вы можете отправлять данные в любом формате, включая String, Integer или любой другой по вашему выбору.

Оказывается, я вчера ответил на несколько похожий вопрос и привел пример кода. Вы также можете найти пример кода полезным. См. Невозможно связаться с сервером в Java

...