我听说有一种方法可以从内存中读取值(只要内存由 JVM 控制)。但是,例如,我如何从地址8E5203
中获取字节?有一种方法叫做getBytes(long)
。我可以用这个吗?
非常感谢!皮特
我听说有一种方法可以从内存中读取值(只要内存由 JVM 控制)。但是,例如,我如何从地址8E5203
中获取字节?有一种方法叫做getBytes(long)
。我可以用这个吗?
非常感谢!皮特
您不能直接访问任何内存位置!它必须由 JVM 管理。要么发生安全异常,要么EXCEPTION_ACCESS_VIOLATION
发生。这可能会使 JVM 本身崩溃。但是如果我们从代码中分配内存,就可以访问字节。
public static void main(String[] args) {
Unsafe unsafe = null;
try {
Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
unsafe = (sun.misc.Unsafe) field.get(null);
} catch (Exception e) {
throw new AssertionError(e);
}
byte size = 1;//allocate 1 byte
long allocateMemory = unsafe.allocateMemory(size);
//write the bytes
unsafe.putByte(allocateMemory, "a".getBytes()[0]);
byte readValue = unsafe.getByte(allocateMemory);
System.out.println("value : " + new String(new byte[]{ readValue}));
}