1

我有一个 C 应用程序。此应用程序写入和读取一些 I/O 端口地址。

我认为 Java 不能本地访问低级 I/O 地址。我对吗?

以下是 C++ 应用程序的示例:

#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <sys/io.h>

int main(int argc, char *argv[])
{
    cout << "Refresh watchdog program" << endl;

    outb(0x87,0x2E);     //Extended Function Mode
    outb(0x30,0x2E);     //Set Watch Dog Timer Activate
    outb(0x01,0x2F);
    int reg = inb(0x2f);
    outb(reg|0x08, 0x2f);

}

我怎样才能在 Java 中做同样的事情?

4

1 回答 1

4

我认为 sun.misc.Unsafe 可能会帮助你。它有类似void putAddress(long address, long value)的方法可能适合您的需要。老实说,我没有从事过这方面的工作,但您可以通过以下方式了解更多信息

http://mydailyjava.blogspot.co.uk/2013/12/sunmiscunsafe.html

http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/

http://highlyscalable.wordpress.com/2012/02/02/direct-memory-access-in-java/

可以在以下位置找到一个小示例程序

http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java

于 2014-05-22T09:04:04.233 回答