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的一個實(shí)例由一個IP地址和可能的相應(yīng)主機(jī)名組成(取決于它是用主機(jī)名構(gòu)造還是已經(jīng)完成了反向主機(jī)名解析)。

NetworkInterface對象
此類表示由名稱組成的網(wǎng)絡(luò)接口和分配給此接口的IP地址列表。 用于標(biāo)識組播組所在的本地接口。 接口通常由諸如“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)絡(luò)接口對象(即網(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 {
// 獲取本機(jī)的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)絡(luò)接口對象(即網(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();
}
}
運(yùn)行結(jié)果:

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

