Правильно ли это утверждение в Java? - PullRequest
3 голосов
/ 16 апреля 2009

Я хотел бы выполнить передачу данных между двумя компьютерами с помощью датаграммы. Я использую следующую строку следующим образом:

host=InetAddress.getByAddress("mypc",new byte[]{192,168,1,110});

но когда я использую приведенное выше утверждение, я получаю эту ошибку: «Возможная потеря точности»

Итак, я привел int к байту следующим образом:

InetAddress.getByAddress("mypc",new byte[]{(byte)192,(byte)168,(byte)1,(byte)110});

Сработало бы вышеприведенное утверждение ???

Ответы [ 4 ]

14 голосов
/ 16 апреля 2009

Если оно уже есть в строке, просто используйте getByName():

InetAddress host = InetAddress.getByName("192.168.1.110");

Использование байтов загромождено и, возможно, опасно (из-за подписанных байтов, используемых в Java). Придерживайтесь String s, если можете.

6 голосов
/ 16 апреля 2009

Нет проблем приведения положительных целочисленных литералов в значения byte, даже если они переполняются.

Функция InetAddress.getByAddress() прекрасно справляется с тем фактом, что значения, превышающие 127, будут преобразованы в отрицательные числа.

Единственное, на что вам нужно обратить внимание - это преобразовать подписанные байты обратно в целые числа, если вы впоследствии захотите их отобразить. Это отлично работает:

byte b = (byte)192;
System.out.println(b); // outputs "-64"

int i = (b & 0xff);
System.out.println(i); // outputs "192"
2 голосов
/ 16 апреля 2009

байты Java подписаны (глупо, я знаю), поэтому больше 127 невозможно.

См. Ответ Алнитакса для более полного (и более позднего :) ответа.

1 голос
/ 16 апреля 2009

Это может не произойти, потому что максимальное значение для байта равно 127 и выше, что оно может привести к отрицательному значению -64 для 192, -88 для 168 и так далее ...

...