JAVA獲取本地MAC地址的方法
InetAddress對(duì)象
此類表示Internet協(xié)議(IP)地址。
IP地址是由IP使用的32位或128位無(wú)符號(hào)數(shù)字,構(gòu)建UDP和TCP協(xié)議的低級(jí)協(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的一個(gè)實(shí)例由一個(gè)IP地址和可能的相應(yīng)主機(jī)名組成(取決于它是用主機(jī)名構(gòu)造還是已經(jīng)完成了反向主機(jī)名解析)。

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

代碼
/**
* @Title: getMACAddress
* @Description: 通過(guò)InetAddress對(duì)象獲取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ò)接口對(duì)象(即網(wǎng)卡),并得到mac地址,mac地址存在于一個(gè)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: 測(cè)試獲取本地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: 測(cè)試獲取本地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對(duì)象
InetAddress localHost = InetAddress.getLocalHost();
// 記錄開始時(shí)間
long start = System.currentTimeMillis();
// 測(cè)試獲取100次的執(zhí)行時(shí)間
for (int i = 0; i < 100; i++) {
String mac = getMACAddress(localHost);
System.out.println(i + " " + mac);
}
// 記錄結(jié)束時(shí)間
long end = System.currentTimeMillis();
System.out.println("總耗時(shí): " + (end - start));
}
/**
* @Title: getMACAddress
* @Description: 通過(guò)InetAddress對(duì)象獲取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ò)接口對(duì)象(即網(wǎng)卡),并得到mac地址,mac地址存在于一個(gè)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é)果來(lái)看,java獲取本地MAC地址還是挺慢的。因?yàn)镸AC不會(huì)輕易改變,所以可以考慮在項(xiàng)目運(yùn)行時(shí)獲取一次MAC地址,然后存放到緩存中,用到MAC地址時(shí)從緩存中取,提高效率。
到此這篇關(guān)于JAVA獲取本地MAC地址的方法的文章就介紹到這了,更多相關(guān)JAVA獲取MAC地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Java中使用jdbc連接數(shù)據(jù)庫(kù)中文出現(xiàn)亂碼的問(wèn)題
這篇文章主要介紹了關(guān)于Java中使用jdbc連接數(shù)據(jù)庫(kù)中文出現(xiàn)亂碼的問(wèn)題,默認(rèn)的編碼和數(shù)據(jù)庫(kù)表中的數(shù)據(jù)使用的編碼是不一致的,如果是中文,那么在數(shù)據(jù)庫(kù)中執(zhí)行時(shí)已經(jīng)是亂碼了,需要的朋友可以參考下2023-04-04
@Valid注解的作用及@Valid注解與@Validated的區(qū)別
這篇文章主要介紹了@Valid注解的作用及@Valid注解與@Validated的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
學(xué)習(xí)在一臺(tái)新電腦上配置JAVA開發(fā)環(huán)境
本文主要介紹了如何在一臺(tái)新電腦上配置JAVA開發(fā)環(huán)境,每一個(gè)步驟都有對(duì)應(yīng)的截圖和文字說(shuō)明,需要的朋友可以參考下2015-07-07
SpringBoot集成P6Spy實(shí)現(xiàn)SQL日志的記錄詳解
P6Spy是一個(gè)框架,它可以無(wú)縫地?cái)r截和記錄數(shù)據(jù)庫(kù)活動(dòng),而無(wú)需更改現(xiàn)有應(yīng)用程序的代碼。一般我們使用的比較多的是使用p6spy打印我們最后執(zhí)行的sql語(yǔ)句2022-11-11
Logback日志基礎(chǔ)及自定義配置代碼實(shí)例
這篇文章主要介紹了Logback日志基礎(chǔ)及自定義配置代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
兩種Eclipse部署動(dòng)態(tài)web項(xiàng)目方法
這篇文章主要介紹了兩種Eclipse部署動(dòng)態(tài)web項(xiàng)目方法,需要的朋友可以參考下2015-11-11
MySQL實(shí)現(xiàn)遠(yuǎn)程登錄的方法
Host 'Local' is not allowed to connect to this MySQL server 的解決方法,需要的朋友可以參考一下2013-03-03

