Что эквивалентно Marshal.ReadIntPtr (IntPtr) (C #) в Java? - PullRequest
2 голосов
/ 03 августа 2011

Что эквивалентно Marshal.ReadIntPtr(IntPtr) (C #) в Java?

1 Ответ

4 голосов
/ 03 августа 2011

Взгляните на следующий класс

sun.misc.Unsafe

Методы, представляющие интерес в этом классе:

public native long getAddress(long address);
public native void putAddress(long address, long value);
public native long allocateMemory(long size);
public native long reallocateMemory(long l, long l1);
public native void setMemory(long l, long l1, byte b);
public native void copyMemory(long l, long l1, long l2);

вот пример его использования:

import java.lang.reflect.Field;
import sun.misc.Unsafe; 
public class Direct {

        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);
            }

            long value = 12345;
            byte size = 1;
            long allocateMemory = unsafe.allocateMemory(size);
            unsafe.putAddress(allocateMemory, value);
            long readValue = unsafe.getAddress(allocateMemory);
            System.out.println("read value : " + readValue);
        }
    }
...