我是靠谱客的博主 体贴口红,最近开发中收集的这篇文章主要介绍算法:将IPv4的IP地址,与对应的int码互转,数据库就存int,代替IP的varchar,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
我们在日常的业务中,有的时候需要存IP地址,一般我们都会在数据库中用varchar来存储IP地址。但是存IP地址用varchar的话,是开销比较大的,如果数据量上来了,那需要的存储空间也就比较大了。此外假如我们想要查找某个IP是否存在的话,字符串比较也是从左到右逐个比较,开销也是比较大的
下面我写了一个转换方法,这个方法可以将一个IP地址转化为int值,然后通过这个int值也可以还原为原来的IP地址。这样存数据库就可以存int值,代替varchar了。而且查找某一IP是否存在之类的业务,也是可以转化为int来查,速度也会加快。因为字符串是从左到右挨个比较,而int比较是否相等,比较一次就够了
注意,这个方法将所有的IP地址都映射了与其对应的int值,完全的一一映射,不会出现两个IP转化为同一个int,更不会出现一个int还原为两个不同的IP
/**
* 将ip的字符串转化为对应的整形码
* @param ip 字符串ip,这里没做数据校验,要传入合法IP
* @return 传入IP对应的整形码,可以用于存数据库,代替varchar
*/
public static int parseIpAddress2Integer(String ip){
String[] ipArr = ip.split("\.");
int ip1 = Integer.parseInt(ipArr[0]) << 24;
int ip2 = Integer.parseInt(ipArr[1]) << 16;
int ip3 = Integer.parseInt(ipArr[2]) << 8;
int ip4 = Integer.parseInt(ipArr[3]);
int ipCode = ip1 + ip2 +ip3 + ip4;
return ipCode;
}
/**
* 将整形码还原为对应的ip字符串
* @param ipCode ip地址的整形码
* @return 还原后的ip地址字符串
*/
public static String parseInteger2IpAddress(int ipCode){
int ip1 = ipCode >>> 24;
int ip2 = ipCode >> 16 & 0xFF;
int ip3 = ipCode >> 8 & 0xFF;
int ip4 = ipCode & 0xFF;
String ip = ip1 + "." + ip2 + "." + ip3 + "." +ip4;
return ip;
}
最后
以上就是体贴口红为你收集整理的算法:将IPv4的IP地址,与对应的int码互转,数据库就存int,代替IP的varchar的全部内容,希望文章能够帮你解决算法:将IPv4的IP地址,与对应的int码互转,数据库就存int,代替IP的varchar所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复