Java InetAddress.getHostName()需要很长时间才能执行

时间:2012-05-02 19:25:19

标签: java inetaddress

我有以下小代码片段:

        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()方法需要相当长的时间才能执行。有人可以解释一下原因吗?

3 个答案:

答案 0 :(得分:9)

InetAddress#getHostName() javadocs开始,该方法将执行reverse hostname lookup。因此,该方法调用的性能取决于JVM与目标主机的域名服务器之间的网络/技术堆栈的性能。

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

答案 1 :(得分:1)

有些地址需要更长时间才能解决。 InetAddress有一个缓存来存储成功和不成功的分辨率。另外,创建一个线程池。您可以提高性能

答案 2 :(得分:0)

toString()似乎更快:

给出InetAddress ia或InterfaceAddress ia,

System.out.println ( ia.toString() )将显示包含比ia.getHostName()

更快的ipAddress的字符串

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

我不知道为什么。