最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換

 更新時間:2020年09月14日 15:04:40   作者:laosun  
這篇文章主要介紹了Java實現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換,幫助大家更好的利用Java處理數(shù)據(jù),感興趣的朋友可以了解下

Java版本的 ip地址和int數(shù)字的相互轉(zhuǎn)換

對于ipv4的地址來說,如果用字符串的形式存儲的話,其占用字節(jié)就比較大,比如對于IPv4地址0.0.0.0的字符串,就需要7個字節(jié),IPv4為255.255.255.255 的字符串,需要15個字節(jié),也就是說存儲一個ip需要占用7~15個字節(jié)。

那么有沒有更節(jié)省空間的存儲方式呢?答案是有。

方案1:

直接把字符串中的'.'去掉,不就變成一個數(shù)字了嘛,比如 "255.255.255.255" 變成 255255255255,然而我們知道int所能表示的最大值 = Integer.MAX_VALUE = 2^31-1 = 2147483647, 255255255255 > 2^31-1,所以需要用長整形long來表示,長整形占用8個字節(jié),也就是說我們將7~15個字節(jié)轉(zhuǎn)換為8字節(jié),在絕大多數(shù)情況下是節(jié)省空間了的。

方案2:

因為考慮到IPv4的地址本質(zhì)上就是32位的二進制串,而一個int類型的數(shù)字剛好為4個字節(jié)32個bit位,所以剛好可以用一個int類型的數(shù)字轉(zhuǎn)表示IPv4地址。所以,我們可以用4個字節(jié)的int數(shù)字表示一個ip地址,這樣可以大大節(jié)省空間。

這里只討論方案2 :)

演示

對于ipv4地址: 192.168.1.3:

每段都用二進制表示: 192(10) = 11000000(2) ; 168(10) = 10101000(2) ; 1(10) = 00000001(2) ; 3(10) = 00000011(2) 。

所以連在一起就是:11000000101010000000000100000011,對應(yīng)的int數(shù)字就是-1062731775 。

具體算法分析:

192左移24位: 11000000 00000000 00000000 00000000

168左移16位: 00000000 10101000 00000000 00000000

001左移08位: 00000000 00000000 00000001 00000000

003左移00位: 00000000 00000000 00000000 00000011

按位或結(jié)果 : 11000000 10101000 00000001 00000011

即 -1062731775

將int類型的數(shù)字轉(zhuǎn)換成ip地址,其實就是上述過程的逆過程,這里就不再贅述。

具體實現(xiàn)方式:

package com.sunjs.kit;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
 * IPv4地址和int數(shù)字的互換
 * @author sun
 */
public class IpKit {
 
  /**
   * IPv4地址轉(zhuǎn)換為int類型數(shù)字
   * @param ipv4Addr
   * @return
   */
  public static int ipToInt(String ipv4Addr) {
    // 判斷是否是ip格式的
    if (!isIPv4Address(ipv4Addr))
      throw new RuntimeException("Invalid ip address");
 
    // 匹配數(shù)字
    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher(ipv4Addr);
    int result = 0;
    int counter = 0;
    while (matcher.find()) {
      int value = Integer.parseInt(matcher.group());
      result = (value << 8 * (3 - counter++)) | result;
    }
    return result;
  }
 
  /**
   * 判斷是否為ipv4地址
   * @param ipv4Addr
   * @return
   */
  private static boolean isIPv4Address(String ipv4Addr) {
    String lower = "(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])"; // 0-255的數(shù)字
    String regex = lower + "(\\." + lower + "){3}";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(ipv4Addr);
    return matcher.matches();
  }
   
  /**
   * 將int數(shù)字轉(zhuǎn)換成ipv4地址
   * @param ip
   * @return
   */
  public static String intToIp(int ip) {
    StringBuilder sb = new StringBuilder();
    int num = 0;
    boolean needPoint = false; // 是否需要加入'.'
    for (int i = 0; i < 4; i++) {
      if (needPoint) {
        sb.append('.');
      }
      needPoint = true;
      int offset = 8 * (3 - i);
      num = (ip >> offset) & 0xff;
      sb.append(num);
    }
    return sb.toString();
  }
   
  public static void main(String[] args) {
    String ip = "124.202.200.166";
  System.out.println(ipToInt(ip));
  System.out.println(intToIp(2093664422));
  }
   
}

以上就是Java實現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換的詳細內(nèi)容,更多關(guān)于Java ip和數(shù)字相互轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mybatis深入講解resultMap的定義及用法

    mybatis深入講解resultMap的定義及用法

    MyBatis的每一個查詢映射的返回類型都是ResultMap,當(dāng)我們提供返回類型屬性是resultType時,MyBatis會自動給我們把對應(yīng)值賦給resultType所指定對象的屬性,當(dāng)我們提供返回類型是resultMap時,將數(shù)據(jù)庫中列數(shù)據(jù)復(fù)制到對象的相應(yīng)屬性上,可以用于復(fù)制查詢,兩者不能同時用
    2022-04-04
  • Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目的詳細步驟

    Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目的詳細步驟

    這篇文章主要介紹了Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Spring框架依賴注入方法示例

    Spring框架依賴注入方法示例

    這篇文章主要介紹了Spring框架依賴注入方法示例,分享了三種方法示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java的項目構(gòu)建工具Maven的配置和使用教程

    Java的項目構(gòu)建工具Maven的配置和使用教程

    Maven是Java世界中的項目管理和構(gòu)建自動化工具,基于POM項目對象模型的思想,下面我們就具體來看一下具體的Java的項目構(gòu)建工具Maven的配置和使用教程:
    2016-05-05
  • Maven倉庫無用文件和文件夾清理的方法實現(xiàn)

    Maven倉庫無用文件和文件夾清理的方法實現(xiàn)

    這篇文章主要介紹了Maven倉庫無用文件和文件夾清理的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java解析php函數(shù)json_encode unicode 編碼問題

    java解析php函數(shù)json_encode unicode 編碼問題

    這篇文章主要介紹了java解析php函數(shù)json_encode unicode 編碼問題,需要的朋友可以參考下
    2016-04-04
  • Mybatis實現(xiàn)分包定義數(shù)據(jù)庫的原理與過程

    Mybatis實現(xiàn)分包定義數(shù)據(jù)庫的原理與過程

    這篇文章主要給大家介紹了關(guān)于Mybatis實現(xiàn)分包定義數(shù)據(jù)庫的原理與過程,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • springboot整合JSR303校驗功能實現(xiàn)代碼

    springboot整合JSR303校驗功能實現(xiàn)代碼

    這篇文章主要介紹了springboot整合JSR303校驗功能實現(xiàn),JSR303校驗方法有統(tǒng)一校驗的需求,統(tǒng)一校驗實現(xiàn)以及分組校驗,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • spring boot 集成 shiro 自定義密碼驗證 自定義freemarker標(biāo)簽根據(jù)權(quán)限渲染不同頁面(推薦

    spring boot 集成 shiro 自定義密碼驗證 自定義freemarker標(biāo)簽根據(jù)權(quán)限渲染不同頁面(推薦

    這篇文章主要介紹了spring-boot 集成 shiro 自定義密碼驗證 自定義freemarker標(biāo)簽根據(jù)權(quán)限渲染不同頁面,需要的朋友可以參考下
    2018-12-12
  • javaWEB實現(xiàn)相冊管理的簡單功能

    javaWEB實現(xiàn)相冊管理的簡單功能

    這篇文章主要介紹了javaWEB實現(xiàn)相冊管理的簡單功能,包括圖片的上傳、統(tǒng)一瀏覽、單個下載、單個刪除,還有一個功能只能刪除自己上傳的文件,感興趣的小伙伴們可以參考一下
    2015-11-11

最新評論

武川县| 息烽县| 澄江县| 天台县| 当阳市| 内乡县| 莒南县| 芦山县| 洪湖市| 曲麻莱县| 丹阳市| 嘉定区| 梅州市| 镇坪县| 祥云县| 株洲县| 彭山县| 鄢陵县| 辽源市| 建平县| 通江县| 岱山县| 班玛县| 大邑县| 陈巴尔虎旗| 若尔盖县| 大悟县| 克什克腾旗| 镇平县| 化隆| 九龙县| 教育| 富民县| 铁岭市| 梓潼县| 石嘴山市| 万载县| 天门市| 会东县| 景泰县| 横峰县|