Java:将表示IP的字符串转换为InetAddress

99

可能是重复问题:
有没有一种简单的方法将Java中的字符串转换为InetAddress?

我想要将一个代表IP地址(例如10.0.2.50)的字符串转换成InetAddress对象。

根据API,可以创建一个提供主机名的字符串来创建对象(例如www.google.ch)。但对于我来说这不是一个选择,因为我没有每个想要创建的InetAddress对象的主机名(除此之外,这需要太长时间)。

是否有可能将一个字符串(例如10.0.2.50)转换为InetAddress对象?(根据API,如果您拥有byte[]作为IP,那么可以这样做,但是如何将包含IP的String转换为byte[]?)


没有找到这个,确实是同样的问题。 - rob
2个回答

188

只需调用 InetAddress.getByName(String host)并传入您的文本IP地址即可。

从javadoc中可以看出:主机名可以是机器名,例如“java.sun.com”,也可以是其IP地址的文本表示形式。


3
使用此程序的人请注意,如果IP地址无效,则查找超时时间足够长,当重复执行时会导致程序运行缓慢。 - Flipbed
44
如果你只是想解析IP地址,那么使用getByName方法是个不好的选择,因为它还会进行主机名查找。如果你的函数传入了一个主机名,那么你将会执行同步的网络I/O,而这并非你的本意。请谨慎选择。 - Glenn Maynard
10
实际的JDK代码会检查第一个字符是否是数字,如果是则直接使用IPAddressUtil解析。 - Andris Birkmanis
1
@AndrisBirkmanis 但是如果有人传入主机名(例如,因为您正在解析配置文件或类似情况),那么情况就不同了。如果您只想解析IP地址,则应使用仅解析IP地址的函数。 - Glenn Maynard
1
sun.net.util 中的 IPAddressUtil 是最佳选择。但我们需要注意这个链接:https://www.oracle.com/java/technologies/faq-sun-packages.html - arulraj.net
显示剩余2条评论

19

InetAddress.getByName(String host)的文档中可以得知:

主机名可以是机器名称,例如"java.sun.com",也可以是其IP地址的文本表示。如果提供了字面IP地址,则仅检查地址格式的有效性。

因此您可以使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接