यदि यह "एक" फ़ंक्शन कॉल में डेटा का एक बड़ा हिस्सा है तो मैं जेएनआई की सिफारिश करता हूं।
इस पर एक नज़र डालें: Sharing output streams through a jni interface
स्निपेट लेख से, यह C++ से जावा के लिए transfert डेटा, विपरीत भी ऐसा करने के लिए आसान होगा:
सभी में, द्विआधारी साझा करने के लिए सामान्य रणनीति जावा के साथ सी से डेटा (ए/वी फाइलें, इमेजेस इत्यादि) बाइट एरे की आवश्यकता है। आप इस तरह सी में एक जावा बाइट सारिणी निर्मित:
const char[] rawData = {0,1,2,3,4,5,6,7,8,9}; //Or get some raw data from somewhere
int dataSize = sizeof(rawData);
printf("Building raw data array copy\n");
jbyteArray rawDataCopy = env->NewByteArray(dataSize);
env->SetByteArrayRegion(rawDataCopy, 0, dataSize, rawData);
और जावा के लिए इसे इस तरह से पारित:
public class MyDataHandler {
OutputStream dataStream;
public MyDataHandler(OutputStream writeTo) { dataStream = writeTo;}
public void handleData(byte[] incomingData) { dataStream.write(incomingData); }
}
:
printf("Finding callback method\n");
//Assumes obj is the Java instance that will receive the raw data via callback
jmethodID aMethodId = env->GetMethodID(env->GetObjectClass(obj),"handleData","([B)V");
if(0==aMethodId) throw MyRuntimeException("Method not found error");
printf("Invoking the callback\n");
env->CallVoidMethod(obj,aMethodId, &rawDataCopy);
आप एक जावा उद्देश्य यह है कि कुछ इस तरह देखा होता
वह हैंडलर मूल विधि के माध्यम से सी को पास किया जाएगा:
public class NativeIntegration {
public native void generateBinaryWithHandler(MyDataHandler handler);
//Here we assume response is something like a network stream
public void doCallNativeFunction(ResponseStream response) {
MyDataHandler handler = new MyDataHandler(response);
generateBinaryWithHandler(handler);
}
}
इसके अलावा, आप अन्य तकनीकों का उपयोग कर सकते हैं: कोर्बा, एएसएन .1 (ASN.1 tool), यूडीपी या टीसीपी
यह सच नहीं है। आप जेवीएम को जोड़कर जेएनआई कोड डीबग कर सकते हैं। – JesperE
यदि आप किसी पीसी पर चल रहे हैं तो आप सही हैं। मेरे काम पर, हम एक एम्बेडेड सिस्टम विकसित कर रहे हैं जो लिनक्स चल रहा है, दुर्भाग्यवश, मूल डिबगर नहीं है। जीडीबी भी नहीं। तो जब जेनी कोड दुर्घटनाग्रस्त हो जाता है, तो यह पता लगाना बहुत मुश्किल है कि क्यों। – Dima