Java之ip地址存储的数据类型

Java之ip地址存储的数据类型,第1张

Java之ip地址存储的数据类型

在java开发中,会遇到处理ip地址信息的需求,下面一起看看其应用方式
通常情况下,mysql数据库中大家都会用字符串来存储ip地址,首先这样是可以的,没什么问题。那有没有其他的存储数据类型,其优缺点如何。

无符号整数方式

节省空间,不管是数据存储空间,还是索引存储空间
便于使用范围查询,between,且效率高
需要4个字节存储,采用字符串时,一个ipv4最小需要7个字符,最大需要15个字符,使用varchar(15),且还额外需要一个字节来保持字符串的长度

不便于阅读
需要手动转换(代码实现工具类)

其他方式,如分别存储ipv4中的各个部分,还需考虑其引用场景和需求
在mysql中,已提供相应的函数去处理ip地址的字符串和整数之间的转换,如下

select inet_aton('192.168.0.1');//3232235521
select inet_ntoa(3232235521);//192.168.0.1

对于ip地址的2种数据类型转换通过代码的方式,如下

public class IpLongUtil {

    
    public static long ip2Long(String ipStr) {
        String[] ip = ipStr.split("\.");
        return (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16)
                + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]);
    }

    
    public static String long2Ip(long ipLong) {
        StringBuilder ip = new StringBuilder();
        ip.append(ipLong >>> 24).append(".");
        ip.append((ipLong >>> 16) & 0xFF).append(".");
        ip.append((ipLong >>> 8) & 0xFF).append(".");
        ip.append(ipLong & 0xFF);
        return ip.toString();
    }

    public static void main(String[] args) {
        System.out.println(ip2Long("192.168.0.1"));
        System.out.println(long2Ip(3232235521L));
        System.out.println(ip2Long("10.0.0.1"));
        System.out.println(long2Ip(167772161L));
    }

}

在此记录一下。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5708220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存