栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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));
    }

}

在此记录一下。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709673.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号