InetAddress: метод getByAddress() принимает не все ip?

415
17 февраля 2017, 02:04

В классе InetAddress есть метод getByAddress,который принимает на вход массив байтов, содержащий IPv4 или IPv6. Но в Java максимально значение byte - 128, то есть некоторые адреса передать не удастся, например на

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

будет ругаться, так как 192 и 168 не входят в диапазон значений byte.

То есть получается, что можно передать далеко не все адреса? Или я что-то не так понимаю?

Answer 1

Классы для работы с IP воспринимают переданные байты как набор битов, а не как знаковые значения типа byte. Поэтому чтобы передать значения выходящие за пределы диапазона достаточно привести их к byte:

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

Значения от 128 до 255 будут приведены к отрицательным значениям от -1 до -128.

В качестве альтернативы можно использовать метод, принимающий строку:

InetAddress host = InetAddress.getByName("192.168.0.1");
READ ALSO
JTextField как вводить только числа?

JTextField как вводить только числа?

Как сделать так, чтобы в JTextField можно было вводить только цифры?

738
Разработать java ee приложение. С чего начать

Разработать java ee приложение. С чего начать

Меня поджимает время, поэтому хочу знать все и сразу (прошу простить и понять)

537
android слайдер картинок [требует правки]

android слайдер картинок [требует правки]

как сделать слайдер и просмотр картинок как в приложении AliExpress на странице товара? есть толковые уроки?

396
Парсинг вводимой формулы для функции

Парсинг вводимой формулы для функции

Написал программу для отрисовки графиков вводимых функций, осталось научить компьютер понимать введённую функцию и передавать её на отрисовкуЧитал,...

512