2011-03-09 7 views
6

मैं सी # में कोड निम्नलिखित है और जावा में इसी तरह की सुविधा की जरूरत है:JNA का उपयोग कर JNA में बाइट सरणी के सूचक प्राप्त

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 जावा –

+0

में System.arrayCopy का उपयोग करें ताकि आप बाइट [] में int [], ByteBuffer.asIntBuffer() को ट्रांसफर करना चाहते हैं जो संभवतः आपको चाहिए। – bestsss

+0

मुझे बाइट के पॉइंटर रेफ चाहिए [] – user206646

उत्तर

8

आप मेमोरी का उपयोग करना चाहते (http://jna.java.net/javadoc/com/sun/jna/Memory.html)

यह thusly का उपयोग करें:

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

जागरूक रहें, आपको मेमोरी ऑब्जेक्ट के लिए एक मजबूत संदर्भ रखने की आवश्यकता है जब तक कि मूल कोड जो स्मृति का उपयोग करेगा, अन्यथा (स्मृति, स्मृति वस्तु reclai जब यह कचरा इकट्ठा होता है तो देशी स्मृति मी)।

यदि आपको देशी मेमोरी के जीवन चक्र पर अधिक नियंत्रण की आवश्यकता है, तो libc से malloc() और free() में मैप करें और इसके बजाय उनका उपयोग करें।

+4

पर अधिक सहायक पोस्ट मूल रूप से एक = बाइट [30] कहने का कोई तरीका है; बी = पॉइंटर.फ्रॉमबेटएरे (ए); ? – rogerdpack

संबंधित मुद्दे