5

我有以下小代码片段:

        InetAddress address = InetAddress.getByName(host);
        if(address.isReachable(TIMEOUT_IN_MILLISECONDS)) {
          System.out.println(host + " is reachable.");
          String hostName = address.getHostName();
          System.out.println(hostName);
        }

如果找到一台机器,getHostName() 方法需要相当长的时间来执行。有人可以解释为什么吗?

4

3 回答 3

11

InetAddress#getHostName()javadocs中,该方法将执行反向主机名查找。因此,该方法调用的性能取决于 JVM 和目标主机的域名服务器之间的网络/技术堆栈的性能。

简而言之,该方法将进行系统调用以执行反向查找(例如getaddrinfo(3)),并且该调用将由操作系统实现,以执行通过为您的机器配置的名称服务器收集主机信息所需的网络操作。

于 2012-05-02T19:30:53.787 回答
1

有些地址需要更长的时间来解决。InetAddress 有一个缓存来存储成功和不成功的解决方案。另外,制作一个线程池。您可以提高性能

于 2012-05-02T19:33:23.430 回答
0

toString()似乎更快:

给定一个 InetAddress ia 或 InterfaceAddress ia,

System.out.println ( ia.toString() )将显示一个包含您的 ipAddress 的字符串,速度比ia.getHostName()

然后,您可以使用ia.toString().substring它来提取它。

我不知道为什么。

于 2014-08-16T16:35:23.907 回答