पर कुछ पढ़ने-योग्य बाइट्स को पार करने का सबसे प्रभावी तरीका मेरे पास एक एंड्रॉइड प्रोजेक्ट है (एंड्रॉइड 1.6 और ऊपर लक्षित) जिसमें सी/सी ++ में लिखे गए मूल कोड शामिल हैं, जो एनडीके के माध्यम से पहुंचे हैं। मैं सोच रहा हूं कि जावा से एनडीके के माध्यम से मेरी जेएनआई गोंद परत में बाइट्स की सरणी को पार करने का सबसे प्रभावी तरीका क्या है। मेरी चिंता यह है कि एंड्रॉइड के लिए एनडीके बाइट्स की सरणी की प्रतिलिपि बनायेगा या सिर्फ मुझे प्रत्यक्ष संदर्भ देगा। मुझे सी ++ स्तर पर बाइट्स तक केवल पढ़ने की आवश्यकता है, इसलिए दृश्यों के पीछे कोई प्रतिलिपि मेरे परिप्रेक्ष्य से समय बर्बाद हो जाएगी।एंड्रॉइड: देशी सी ++
वेब पर इस बारे में जानकारी ढूंढना आसान है, लेकिन मुझे यकीन नहीं है कि सबसे प्रासंगिक जानकारी क्या है। उदाहरण:
Get the pointer of a Java ByteBuffer though JNI
http://www.milk.com/kodebase/dalvik-docs-mirror/docs/jni-tips.html
http://elliotth.blogspot.com/2007/03/optimizing-jni-array-access.html
तो किसी को पता है सबसे अच्छा (सबसे कुशल, कम से कम नकल) जिस तरह से वर्तमान NDK में यह करने के लिए क्या है? GetByteArrayRegion? GetByteArrayElements? कुछ और?
क्या विपरीत करने के लिए कोई समान कुशल API है? - मूल परत से जावा परत से 'बाइट []' या 'बाइटबफर' के रूप में 'हस्ताक्षरित char * 'गुजर रहा है? –
दोनों प्रत्यक्ष बाइटबफर और बाइट [] दोनों को देशी पक्ष से पढ़ने/लिखने के लिए उपयोग किया जा सकता है। एक बार जब आप env-> GetDirectBufferAddress (buffer) या env-> ArrayElements (array, ...) प्राप्त करते हैं, तो आप सी/मेमकोपी फ़ंक्शन को पढ़ने/कॉपी करने के लिए उपयोग कर सकते हैं। लेकिन सीधे बाइटबफर बहुत तेज़ है, प्रतियां नहीं खेलें, इसकी सुरक्षित, आदि इत्यादि –