java唯一标识_java怎么获取电脑的唯一标识?
首先,这是一个更加接近于计算机硬件的东西,因此应该考虑使用JNI技术,底层采用C语言或C++实现,C++读取计算机硬件信息,然后返回java进行处理,至于防止重复,这个你就要自己想办法了,因为毕竟计算机是多个硬件组合的,同一批次硬件标识有所相似也没有办法避免,只能通过一些算法避免重复。JNI技术是这样:首先编写一个类,此类含有native方法,即:private/protected/public
首先,这是一个更加接近于计算机硬件的东西,因此应该考虑使用JNI技术,底层采用C语言或C++实现,C++读取计算机硬件信息,然后返回java进行处理,至于防止重复,这个你就要自己想办法了,因为毕竟计算机是多个硬件组合的,同一批次硬件标识有所相似也没有办法避免,只能通过一些算法避免重复。
JNI技术是这样:首先编写一个类,此类含有native方法,即:
private/protected/public 返回类型 方法名 (参数表);
然后找到这个类的class文件,在Eclipse的工作空间对应的bin目录可以看到。
在地址栏输入cmd,打开命令提示符,输入javah 类名然后回车,可以发现生成了一个头文件。下面创建一个C语言/C++项目,复制刚刚的头文件进去,配置此项目使之包含%java_home%/include目录以及%java_home%/win32目录,新建一个cpp文件,实现头文件中的各个方法。
例如:
public class NativeHardware {
public native String getHostName();
public native int getCPUVersion();
public native int getCPULevel();
public native int getCpuCount();
public native String[] getNetWorkAddr();
}
import java.io.File;
import java.net.MalformedURLException;
public class MainStart {
public static void main(String[] args) throws MalformedURLException {
System.load(new File("lib/JNINative.dll").getAbsolutePath());
NativeHardware hard = new NativeHardware();
System.out.println(hard.getCPULevel());
}
}
生成的头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include /* Header for class NativeHardware */
#ifndef _Included_NativeHardware#define _Included_NativeHardware#ifdef __cplusplusextern "C" {
#endif
JNIEXPORT jstring JNICALL Java_NativeHardware_getHostName
(JNIEnv *, jobject);
JNIEXPORT jint JNICALL Java_NativeHardware_getCPUVersion
(JNIEnv *, jobject);
JNIEXPORT jint JNICALL Java_NativeHardware_getCPULevel
(JNIEnv *, jobject)
JNIEXPORT jint JNICALL Java_NativeHardware_getCpuCount
(JNIEnv *, jobject);
JNIEXPORT jobjectArray JNICALL Java_NativeHardware_getNetWorkAddr
(JNIEnv *, jobject);
#ifdef __cplusplus}
#endif#endif
cpp文件实现头文件的方法
#include #include#include "NativeHardware.h" using namespace std;
JNIEXPORT jint JNICALL Java_NativeHardware_getCPUVersion
(JNIEnv *, jobject){
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
return (long)sysInfo.wProcessorRevision;
}
JNIEXPORT jint JNICALL Java_NativeHardware_getCPULevel
(JNIEnv *, jobject){
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
return (long)sysInfo.wProcessorLevel;
}
更多推荐
所有评论(0)