該方法可以得到遠程主機的域名也可以得到本機名getHostName方法的定義如下
public String getHostName()
下面是三種創建InetAddress對象的方式在這三種方式中getHostName返回的值是不同的
使用getLocalHost方法創建InetAddress對象
如果InetAddress對象是用getLocalHost方法創建的getHostName返回的是本機名如下面的代碼所示
InetAddress address = InetAddressgetLocalHost();
Systemoutprintln(addressgetHostName()); // 輸出本機名
使用域名創建InetAddress對象
用域名作為getByName和getAllByName方法的參數調用這兩個方法後系統會自動記住這個域名當調用getHostName方法時就無需再訪問DNS服務器而是直接將這個域名返回如下面的代碼所示
InetAddress address = InetAddressgetByName();
Systemoutprintln(addressgetHostName()); // 無需訪問DNS服務器直接返回域名
使用IP地址創建InetAddress對象
使用IP地址創建InetAddress對象時(getByNamegetAllByName和getByAddress方法都可以通過IP地址創建InetAddress對象)並不需要訪問DNS服務器因此通過DNS服務器查找域名的工作就由getHostName方法來完成如果這個IP地址不存在或DNS服務器不允許進行IP地址和域名的映射getHostName方法就直接返回這個IP地址如下面的代碼所示
InetAddress address = InetAddressgetByName();
Systemoutprintln(addressgetHostName()); // 需要訪問DNS服務器才能得到域名
InetAddress address = InetAddressgetByName(); // IP地址不存在
Systemoutprintln(addressgetHostName()); // 直接返回IP地址
從上面的三種情況可以看出只有通過使用IP地址創建的InetAddress對象調用getHostName方法時才訪問DNS服務器在其他情況getHostName方法並不會訪問DNS服務器而是直接將域名或本機名返回下面的代碼演示了在不同情況下如何使用getHostName方法並計算了各種情況所需的毫秒數
package mynet;
import *;
public class DomainName
{
public static void main(String[] args) throws Exception
{
long time = ;
// 得到本機名
InetAddress address = InetAddressgetLocalHost();
Systemoutprintln(本機名 + addressgetHostName());
// 直接返回域名
InetAddress address = InetAddressgetByName();
time = SystemcurrentTimeMillis();
Systemoutprint(直接得到域名 + addressgetHostName());
Systemoutprintln( 所用時間
+ StringvalueOf(SystemcurrentTimeMillis() time) + 毫秒);
// 通過DNS查找域名
InetAddress address = InetAddressgetByName();
Systemoutprintln(address: + address); // 域名為空
time = SystemcurrentTimeMillis();
Systemoutprint(通過DNS查找域名 + addressgetHostName());
Systemoutprintln( 所用時間 + StringvalueOf(SystemcurrentTimeMillis() time)+ 毫秒);
Systemoutprintln(address: + address); // 同時輸出域名和IP地址
}
}
運行結果
本機名 ComputerName
直接得到域名 所用時間 毫秒
address: /
通過DNS查找域名 bigipo 所用時間 毫秒
address: bigipo/
從上面的運行結果可以看出第一個毫秒數是而第二個毫秒數是這說時使用域名創建的InetAddress對象在使用getHostName方法時並不訪問DNS服務器而使用IP地址創建的InetAddress對象在使用getHostName方法時需要訪問DNS服務器對於第三個毫秒數可能多次運行DomainName後會越來越小這是因為DNS服務器的緩存的緣故但一般這個數都會比大也許有很多人會問第二行和第四行得到的域名怎麼不一樣其實和bigipo都是oracle的域名我們也可以通過來訪問oracle的官方網站至於這兩個域名有什麼區別將在下面的文章中討論
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26413.html