Прежде всего, существует фабричный метод, который принимает только байтовый массив и выполняет то, что вы ожидаете:
byte[] addr = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
InetAddress ip = Inet6Address.getByAddress(addr);
Однако нас интересует часть имени хоста, поэтому давайте прочитаем документация для getHostName()
:
Получает имя хоста для этого IP-адреса.
Если этот InetAddress был создан с именем хоста, это имя хоста будет запомнено и возвращено, в противном случае будет выполнен обратный поиск имени, и результат будет возвращен на основе настроенной системой службы поиска имени.
Мы создали этот первый IP-адрес без имени хоста, поэтому, согласно javadoc, вызов getHostName()
выполнит фактический поиск. Это может или не очень то, что мы хотим, поэтому Java дает нам второй вариант. Если мы построим адрес следующим образом:
InetAddress ip = InetAddress.getByAddress("foo", addr);
, то getHostName()
просто напечатает имя хоста, которое мы дали (foo
) без поиска.
Кстати, то же самое объяснение можно найти в javadoc для самого InetAddress
:
Экземпляр InetAddress состоит из IP-адреса и, возможно, соответствующего хоста. имя (в зависимости от того, создан ли он с именем хоста или уже выполнил обратное разрешение имени хоста).