首先,这是一个更加接近于计算机硬件的东西,因此应该考虑使用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;

}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐