2011-03-09 3 views
6

He siguiente código en C# y necesita una funcionalidad similar en Java utilizando JNA:conseguir puntero de la matriz de bytes en jña

IntPtr pImage = SerializeByteArrayToIntPtr(imageData); 

public static IntPtr SerializeByteArrayToIntPtr(byte[] arr) 
     { 
      IntPtr ptr = IntPtr.Zero; 
      if (arr != null && arr.Length > 0) 
      { 
       ptr = Marshal.AllocHGlobal(arr.Length); 
       Marshal.Copy(arr, 0, ptr, arr.Length); 
      } 
      return ptr; 
     } 
+0

@ user206646 use System.arrayCopy en java –

+0

por lo que desea que el byte de transferencia [] en int [], ByteBuffer.asIntBuffer() probablemente haga lo que necesite. – bestsss

+0

Quiero puntero ref del byte [] – user206646

Respuesta

8

que desea utilizar la memoria (http://jna.java.net/javadoc/com/sun/jna/Memory.html)

Use que de esta manera:

// allocate sufficient native memory to hold the java array 
Pointer ptr = new Memory(arr.length); 

// Copy the java array's contents to the native memory 
ptr.write(0, arr, 0, arr.length); 

Tenga en cuenta que debe mantener una referencia fuerte al objeto Memoria mientras que el código nativo que utilizará la memoria lo necesite (de lo contrario, el objeto Memoria se recuperará) m la memoria nativa cuando es basura recolectada).

Si necesita más control sobre el ciclo de vida de la memoria nativa, haga un mapa en malloc() y libre() desde libc y utilícelos en su lugar.

+4

¿Hay alguna forma de decir básicamente a = byte [30]; b = Pointer.fromByteArray (a); ? – rogerdpack

Cuestiones relacionadas