JAVA獲取本地MAC地址的方法
InetAddress對象
此類表示Internet協(xié)議(IP)地址。
IP地址是由IP使用的32位或128位無符號數(shù)字,構(gòu)建UDP和TCP協(xié)議的低級協(xié)議。 IP地址結(jié)構(gòu)由定義RFC 790: Assigned Numbers , RFC 1918: Address Allocation for Private Internets , RFC 2365: Administratively Scoped IP Multicast和RFC 2373: IP Version 6 Addressing Architecture 。 InetAddress的一個實例由一個IP地址和可能的相應主機名組成(取決于它是用主機名構(gòu)造還是已經(jīng)完成了反向主機名解析)。

NetworkInterface對象
此類表示由名稱組成的網(wǎng)絡接口和分配給此接口的IP地址列表。 用于標識組播組所在的本地接口。 接口通常由諸如“l(fā)e0”的名稱所知。

代碼
/**
* @Title: getMACAddress
* @Description: 通過InetAddress對象獲取MAC地址
* @param inetAddress
* @return
* @throws Exception String
* @author: wangyk
* @date: 2020年11月23日 上午10:24:42
* @version: 2.0.1
*/
private static String getMACAddress(InetAddress inetAddress) throws Exception {
// 獲得網(wǎng)絡接口對象(即網(wǎng)卡),并得到mac地址,mac地址存在于一個byte數(shù)組中。
byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress();
// 下面代碼是把mac地址拼裝成String
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mac.length; i++) {
if (i != 0) {
sb.append("-");
}
// mac[i] & 0xFF 是為了把byte轉(zhuǎn)化為正整數(shù)
String s = Integer.toHexString(mac[i] & 0xFF);
sb.append(s.length() == 1 ? 0 + s : s);
}
// 把字符串所有小寫字母改為大寫成為正規(guī)的mac地址并返回
return sb.toString().toUpperCase();
}
演示
/**
* @Title: Test.java
* @Description: 測試獲取本地ip
* @author: wangyk
* @date: 2020年11月23日 上午10:21:13
* @version: 2.0.1
*/
package com.yike.datamigration;
import java.net.InetAddress;
import java.net.NetworkInterface;
/**
* @Title: Test.java
* @Description: 測試獲取本地ip
* @author: wangyk
* @date: 2020年11月23日 上午10:21:13
* @version: 2.0.1
*/
public class Test {
/**
* @Title: main
* @Description: 程序的入口
* @param args
* @throws Exception void
* @author: wangyk
* @date: 2020年11月23日 上午10:25:25
* @version: 2.0.1
*/
public static void main(String[] args) throws Exception {
// 獲取本機的InetAddress對象
InetAddress localHost = InetAddress.getLocalHost();
// 記錄開始時間
long start = System.currentTimeMillis();
// 測試獲取100次的執(zhí)行時間
for (int i = 0; i < 100; i++) {
String mac = getMACAddress(localHost);
System.out.println(i + " " + mac);
}
// 記錄結(jié)束時間
long end = System.currentTimeMillis();
System.out.println("總耗時: " + (end - start));
}
/**
* @Title: getMACAddress
* @Description: 通過InetAddress對象獲取MAC地址
* @param inetAddress
* @return
* @throws Exception String
* @author: wangyk
* @date: 2020年11月23日 上午10:24:42
* @version: 2.0.1
*/
private static String getMACAddress(InetAddress inetAddress) throws Exception {
// 獲得網(wǎng)絡接口對象(即網(wǎng)卡),并得到mac地址,mac地址存在于一個byte數(shù)組中。
byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress();
// 下面代碼是把mac地址拼裝成String
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mac.length; i++) {
if (i != 0) {
sb.append("-");
}
// mac[i] & 0xFF 是為了把byte轉(zhuǎn)化為正整數(shù)
String s = Integer.toHexString(mac[i] & 0xFF);
sb.append(s.length() == 1 ? 0 + s : s);
}
// 把字符串所有小寫字母改為大寫成為正規(guī)的mac地址并返回
return sb.toString().toUpperCase();
}
}
運行結(jié)果:

建議
從運行結(jié)果來看,java獲取本地MAC地址還是挺慢的。因為MAC不會輕易改變,所以可以考慮在項目運行時獲取一次MAC地址,然后存放到緩存中,用到MAC地址時從緩存中取,提高效率。
到此這篇關于JAVA獲取本地MAC地址的方法的文章就介紹到這了,更多相關JAVA獲取MAC地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot?集成spring?cache緩存的解決方案
這篇文章主要介紹了Springboot?集成spring?cache緩存,使用緩存最關鍵的一點就是保證緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性,本文給大家介紹最常用的緩存操作模式,對Springboot?集成spring?cache緩存操作流程感興趣的朋友一起看看吧2022-06-06
SpringCloud容器化服務發(fā)現(xiàn)及注冊實現(xiàn)方法解析
這篇文章主要介紹了SpringCloud容器化服務發(fā)現(xiàn)及注冊實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
java使用POI讀取properties文件并寫到Excel的方法
這篇文章主要介紹了java使用POI讀取properties文件并寫到Excel的方法,涉及java操作properties文件及Excel文件的相關技巧,需要的朋友可以參考下2015-06-06
IDEA2023.3.4開啟SpringBoot項目的熱部署(圖文)
本文使用的開發(fā)工具是idea,使用的是springboot框架開發(fā)的項目,配置熱部署,可以提高開發(fā)效率,文中通過圖文介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02
spring中websocket定時任務實現(xiàn)實時推送
本文主要介紹了spring中websocket定時任務實現(xiàn)實時推送,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
IDEA報java:?java.lang.OutOfMemoryError:?Java?heap?space錯誤
這篇文章主要給大家介紹了關于IDEA報java:?java.lang.OutOfMemoryError:?Java?heap?space錯誤的解決辦法,文中將解決的辦法介紹的非常詳細,需要的朋友可以參考下2024-01-01

