java获取本机ipv4,并使用Google Guava 缓存
生活随笔
收集整理的這篇文章主要介紹了
java获取本机ipv4,并使用Google Guava 缓存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java寫個util,獲取本機ip,并使用Google Guava 緩存起來
四個方法:
- 獲取本機ipv4
- ip轉16進制
- 16進制轉ip
- 校驗ip
首先,Google Guava使用的maven配置
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>18.6.1.8</version></dependency> import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit;public class MyUtil {//使用緩存private static Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(1).expireAfterWrite(2, TimeUnit.DAYS).build();/*** 獲取本機ipv4地址, 當機器有多張網卡時,只會獲取其中一個* 默認會緩存2天*/public static String getIpv4() throws Exception {return cache.get("ip", new Callable<String>() {@Overridepublic String call() throws Exception {Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();while (nis.hasMoreElements()) {NetworkInterface ni = nis.nextElement();if (!ni.isUp() || ni.isLoopback() || ni.isVirtual()) {continue;}Enumeration<InetAddress> ias = ni.getInetAddresses();if (!ias.hasMoreElements()) {continue;}while (ias.hasMoreElements()) {InetAddress ia = ias.nextElement();if (ia.isLoopbackAddress()) {continue;}if (!(ia instanceof Inet4Address)) {continue;}return ia.getHostAddress();}}return "";}});}/*** 判斷是否是合法的ipv4地址* @param ipStr* @return*/public static boolean isIpV4(String ipStr){if (ipStr != null && !ipStr.isEmpty()) {String regex="^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$";if (ipStr.matches(regex)) {return true;} else {return false;}}return false;}/*** 將ip轉換為定長8個字符的16進制表示形式:255.255.255.255 -> FFFFFFFF* @param ip ipv4地址* @return String hex表示的ipv4地址*/public static String hexIp(String ip) {StringBuilder sb = new StringBuilder();for (String seg : ip.split(IP_SPLIT)) {String h = Integer.toHexString(Integer.parseInt(seg));if (h.length() == 1) {sb.append("0");}sb.append(h);}return sb.toString();}/*** 將16進制表示的ip地址轉換為數字表示形式: FFFFFFFF -> 255.255.255.255* @param hexIp hex表示的ipv4地址* @return String 數字表示ipv4地址*/public static String hexIpToString(String hexIp){StringBuilder sb = new StringBuilder();int i = 0;StringBuffer tmp = new StringBuffer();int len = hexIp.toCharArray().length;for (char seg : hexIp.toCharArray()) {tmp.append(seg);i++;if(i % 2 == 0){int val = Integer.parseInt(tmp.toString(), 16);sb.append(val);if(i < len){sb.append(".");}tmp = new StringBuffer();}}return sb.toString();}public static void main(String[] args) throws Exception {//測試String ipv4 = getIpv4();System.out.println("ip:"+ipv4);String s16 = hexIp(ipv4);System.out.println("16進制ip:"+s16);String s10 = hexIpToString(s16);System.out.println("10進制ip:"+s10);boolean isOk = isIpV4(ipv4);System.out.println("是否是有效ip:"+isOk );} }總結
以上是生活随笔為你收集整理的java获取本机ipv4,并使用Google Guava 缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: api接口设计
- 下一篇: synthesize和dynamic