3

メモリから値を読み取る方法があると聞きました(メモリがJVMによって制御されている限り)。8E5203しかし、たとえばアドレスからバイトを取得するにはどうすればよいですか?と呼ばれるメソッドがありgetBytes(long)ます。これは使えますか?

どうもありがとう!ピート

4

1 に答える 1

2

メモリの場所に直接アクセスすることはできません! 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}));
}
于 2011-04-14T10:43:47.960 に答える