InetAddress.getLocalHost().getHostAddress() 和 InetAddress.getLocalHost().getAddress() 有啥区别?
Posted
技术标签:
【中文标题】InetAddress.getLocalHost().getHostAddress() 和 InetAddress.getLocalHost().getAddress() 有啥区别?【英文标题】:What's the difference between InetAddress.getLocalHost().getHostAddress() and InetAddress.getLocalHost().getAddress()?InetAddress.getLocalHost().getHostAddress() 和 InetAddress.getLocalHost().getAddress() 有什么区别? 【发布时间】:2019-05-20 03:19:13 【问题描述】:代码如下:
`InetAddress me = InetAddress.getLocalHost();
System.out.println("Local host address: " + me.getHostAddress());
System.out.println("Adress: " + Arrays.toString(me.getAddress()));`
而且两个输出的地址不一样,为什么?
或者一个更好的问题:这两者之间有什么区别?
【问题讨论】:
【参考方案1】:getHostAddress()
和getAddress()
返回相同的信息,它们之间的唯一区别是信息表示。
getHostAddress()
返回字符串,这是人类可读的文本。比如在我的电脑里是"192.168.29.106"
。
getAddress()
,另一方面,返回一个字节数组(在 IPv4 的情况下为 4 个字节)。比如在我的电脑里是[-64, -88, 29, 106]
——-64
是字节0xC0 (11000000)
的有符号表示,如果是无符号则表示192
,而-88
表示0xA8 (10101000)
,如果是则表示168
未签名。 29
代表字节 0x1D
和 106
代表字节 0x6A
。
"192.168.29.106"
或 0xC0 0xA8 0x1D 0x6A
,它们是同一个东西。
【讨论】:
以上是关于InetAddress.getLocalHost().getHostAddress() 和 InetAddress.getLocalHost().getAddress() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
InetAddress.getLocalHost()详解及异常处理
InetAddress.getLocalHost().getHostName() JDK 11 和 JDK 8 之间的不同行为
在linux下用 java 输出 InetAddress.getLocalHost();的结果是啥?
为啥 InetAddress.getLocalHost().getHostName() 返回与 bash“主机名”不同的值?