我有以下C#代码:
int num = Convert.ToInt32(this.Memory.ReadInt(
this.Memory.BaseAddress() + 0x80f0cc, new int[] { 12, 0x6c5c }));
这将从内存中读取数据并给出整数值。
这在Java中是否有可能实现?我尝试过在线搜索,但却无法获得任何结果。
答案 0 :(得分:1)
不,Java专门设计为不允许...... 但是......
它没有得到官方支持(以及它是如何/是否在JVM实现之间可能有所不同),但是类sun.misc.Unsafe
允许你做一些你通常不应该做的事情。请参阅this article。
摘录:
@Test
public void testCopy() throws Exception {
long address = unsafe.allocateMemory(4L);
unsafe.putInt(address, 100);
long otherAddress = unsafe.allocateMemory(4L);
unsafe.copyMemory(address, otherAddress, 4L);
assertEquals(100, unsafe.getInt(otherAddress));
}
unsafe.getInt(otherAddress)
调用可能是您在纯Java中可以实现的最接近的事情。
关于Unsafe
是否应该获得官方支持,有一个survey in 2014,但我不确定是什么(如果有的话)。
答案 1 :(得分:0)
没有。使用纯Java代码无法访问本机内存。您可以使用JNA或JNI链接到本机库,它们可以访问任意内存,但Java本身在虚拟机中运行,并且不允许您在虚拟机外部的或内明确访问内存。
答案 2 :(得分:0)
答案 3 :(得分:0)
Makky,你可以看看the old reply关于java中的内存管理。他描述了为什么你不能这样做。