मेरे पास एक जावा एप्लिकेशन है जिसे मुझे कुछ जानकारी सी ++ प्रोग्राम में पास करने की आवश्यकता है। यह सुझाव दिया गया है कि मैं ऐसा करने के लिए कुछ सरल सॉकेट प्रोग्रामिंग का उपयोग करता हूं। क्या यह सबसे अच्छा तरीका है? यदि विकल्प नहीं हैं तो क्या? यदि हां, तो मुझे सॉकेट प्रोग्रामिंग के बारे में सीखने के बारे में कैसे जाना चाहिए?जावा से सी ++ तक जानकारी पास करने का सबसे अच्छा तरीका क्या है?
उत्तर
आप कुछ ही विकल्प हैं:
- सेल्सियस के लिए जावा से एक फ़ाइल दर्रा ++। यह शायद सबसे सरल है। परीक्षण करना आसान है और किसी भी तीसरे पक्ष के पुस्तकालयों को किसी भी अंत में आवश्यकता नहीं है।
- उल्लेख के अनुसार सॉकेट का उपयोग करें। सी ++ में, यदि आपको क्रॉस-प्लेटफ़ॉर्म समाधान की आवश्यकता होती है तो ACE या boost जैसी लाइब्रेरी आपको कुछ दिल की धड़कन
- जावा से C++ या इसके विपरीत कॉल करने के लिए JNI का उपयोग करेंगी। यह शायद सबसे कठिन है, लेकिन सबसे अधिक प्रदर्शन करने वाला है।
, के लिए "java socket tutorial" या "c++ socket tutorial" आप में बहुत सारी जानकारी दे देंगे एक गूगल खोज।
आप जावा मूल इंटरफ़ेस (जेएनआई) का उपयोग कर सकते हैं। जेएनआई आपको जावा अनुप्रयोगों से सी पुस्तकालयों को कॉल करने की अनुमति देता है। ध्यान दें कि जेएनआई कॉल सी हैं और सी ++ कॉल नहीं हैं, इसलिए आपको अपने सी ++ फ़ंक्शंस (बाहरी "सी") पर सी कॉलिंग सम्मेलन निर्दिष्ट करना होगा।
जेएनआई को करने के लिए कड़ी मेहनत की प्रतिष्ठा है। यह आसान नहीं है लेकिन यह निश्चित रूप से करने योग्य है। मैं सॉकेट का उपयोग करने के खिलाफ सलाह देंगे। सॉकेट का उपयोग करना आसान तरीका बाहर की तरह लगता है, लेकिन मेरे लिए यह बुरा कीड़े की एक कर सकते हैं खोलने के लिए समान है ...
अधिक जानकारी की आवश्यकता है (लेकिन एक अच्छा सवाल)।
क्या ये दो अलग-अलग कार्यक्रम एक ही समय में चल रहे हैं?
यदि नहीं, और जावा प्रोग्राम को सी ++ लाइब्रेरी कॉल करने की आवश्यकता है, तो जेएनआई उत्तर एक अच्छा समाधान है, लेकिन यह वास्तव में प्रक्रियाओं में काम नहीं करेगा।
प्रक्रियाओं के मामले में, आपको वास्तव में प्रक्रियाओं में संवाद करने का एक तरीका खोजने की आवश्यकता है ... एक साधारण समाधान (शायद सबसे अच्छा नहीं, लेकिन मुझे आपकी सटीक स्थिति नहीं पता) बाइनरी होगी फ़ाइल जो लिखा और पढ़ा गया है ... बस दौड़ की स्थिति से सावधान रहना न भूलें! सॉकेट भी काम कर सकते हैं, लेकिन यदि आपके प्रोग्राम बहुत से संवाद करते हैं, तो यह सीपीयू पावर पर एक हॉग का थोड़ा सा हो सकता है।
इसी प्रकार के प्रश्न: Best way to access Java classes from C++? (better than using JNI directly)
यह करने के लिए एक आसान तरीका मानक इनपुट और आउटपुट उपयोग कर रहा है:
class MyTest {
public static void main(String... args) {
System.out.println("carpet");
}
} // Java
#include <iostream>
#include <string>
int main() {
string input;
std::getline(std::cin, input);
std::cout << "from java: " << input << std::endl; // output: carpet
} // C++
# start by piping java's output to c++'s input
$ java MyTest | ./my_receive
विकल्प है कि डेव उल्लेख सबसे आम तरीके से कुछ हैं।
जेएनआई समाधान के विस्तार के रूप में, यदि आप जावा और सी ++ के बीच कुछ कच्चा डेटा साझा करना चाहते हैं तो आप सीधे बाइटबफर (जावा 1.4 और आगे) देख सकते हैं। प्रत्यक्ष बाइट बफर आपको सी ++ या जावा पक्ष पर कुछ आकार के बफर आवंटित करने की अनुमति देता है और फिर आसानी से दोनों भाषाओं से बफर तक पहुंचता है; जावा में यह बाइटबफर ऑब्जेक्ट पर विधियों के माध्यम से किया जाता है और सी ++ में आप डेटा में पॉइंटर प्राप्त कर सकते हैं। बाइटबफर आसान हैं यदि आपके पास विनिमय करने के लिए अच्छी जानकारी है और आप इसे जेएनआई विधि में पैरामीटर के रूप में पास नहीं करना चाहते हैं।
सॉकेट दृष्टिकोण शायद ओवरकिल है, लेकिन मुझे यकीन नहीं है कि आप विशेष रूप से क्या करने का प्रयास कर रहे हैं।
इसके अलावा, अगर यह शोर में खोया नहीं गया है, तो यदि आप जेएनआई मार्ग का प्रयास करते हैं तो आपकी सहायता के लिए SWIG का उपयोग करें। http://www.swig.org/
SOAP का विकल्प भी है लेकिन शायद यह मानना है कि आपको एक ही मशीन पर दो प्रक्रियाएं मिल गई हैं। फिर भी मैं पूर्णता के लिए इसका जिक्र करता हूं।
हालांकि एक उत्तर स्वीकार कर लिया गया है, यहां एक महत्वपूर्ण समस्या दोनों भाषाओं के बीच अर्थपूर्ण मेल नहीं है: मान लीजिए कि आपके पास कुछ प्रकार का स्ट्रीम कनेक्शन चल रहा है, आप डेटा कुशलता से कैसे बदलते हैं?
एक समाधान जो मैं सुझा सकता हूं वह Google प्रोटोकॉल बफर है। यह उपप्रोसेस/जेएनआई/सॉकेट समस्या को हल नहीं करता है, लेकिन यह क्या करता है यह आपको स्ट्रीम प्रोटोकॉल पर एक जटिल ऑब्जेक्ट संरचना पारगमन करने का एक शानदार तरीका है।
याद रखें: विशेष रूप से जटिल ऑब्जेक्ट संदर्भों के लिए जेएनआई जटिल है, लेकिन यह कुशल है। सबसे महत्वपूर्ण बात यह है कि उस कुशल संदर्भ स्विच पर डेटा को सही तरीके से पास करना है। जीपीबी + जेएनआई/सब-प्रोसेस सॉकेट डेटा को खींचने के लिए एक एकल संदर्भ स्विच की अनुमति देता है, दोनों तरफ कुशल कोडेक समर्थन के साथ संयुक्त।
- 1. विम से इमाक्स तक स्विच करने का सबसे अच्छा तरीका?
- 2. सबसे अच्छा तरीका है जावा
- 3. फ्लोट पास करने का सबसे आसान तरीका [] [] से सी ++ जेएनआई
- 4. सी # परियोजना आयोजित करने का सबसे अच्छा तरीका क्या है?
- 5. जावा/सी # से सी ++ में जाने का सबसे अच्छा तरीका क्या है?
- 6. जावा से ऐप्पलस्क्रिप्ट निष्पादित करने का सबसे अच्छा तरीका
- 7. तारों को पार्स करने का सबसे अच्छा तरीका क्या है?
- 8. रुझान डेटा संग्रहीत करने का सबसे अच्छा तरीका क्या है?
- 9. एफ # कोड दस्तावेज करने का सबसे अच्छा तरीका क्या है?
- 10. स्कैला (या जावा) से पायथन कोड का उपयोग करने का सबसे अच्छा तरीका क्या है?
- 11. सी #/.net से प्रिंट करने का सबसे अच्छा तरीका?
- 12. सर्वर पर छवि पास करने का सबसे अच्छा तरीका?
- 13. Django 0.96 से 1.0 तक अपग्रेड करने का सबसे अच्छा तरीका क्या है?
- 14. jquery 1.3 से 1.4 तक अपग्रेड करने का सबसे अच्छा तरीका क्या है?
- 15. सी # और जावा इंटरफेस करने का सबसे अच्छा तरीका क्या है?
- 16. जावा में जावा को पार्स करने का सबसे अच्छा तरीका
- 17. बुनियादी संख्या पहचान करने का सबसे अच्छा तरीका क्या है?
- 18. मेरे डीबी में टाइमज़ोन जानकारी स्टोर करने का सबसे अच्छा तरीका क्या है?
- 19. RedirectToAction का परीक्षण करने का सबसे अच्छा तरीका क्या है?
- 20. जावा वेब सेवा का नकल करने का सबसे अच्छा तरीका
- 21. पायथन से जावा कोड को कॉल करने का सबसे अच्छा तरीका क्या है?
- 22. jQuery प्रदर्शन करने का सबसे अच्छा तरीका क्या है .change()
- 23. लॉगिंग करने का सबसे अच्छा तरीका क्या है?
- 24. एकाधिक सबव्यूज़ व्यवस्थित करने का सबसे अच्छा तरीका क्या है?
- 25. एनएसएमयूटेबलएरे को शफल करने का सबसे अच्छा तरीका क्या है?
- 26. सी # में एक्सएमएल डंप को सामान्यीकृत करने और एकत्रित करने का सबसे अच्छा तरीका क्या है?
- 27. सबसे अच्छा तरीका है उद्देश्य सी
- 28. डेटाबेस में स्थान जानकारी संग्रहीत करने का सबसे अच्छा तरीका क्या है?
- 29. सबसे अच्छा तरीका है?
- 30. पायथन प्रिंट टॉगल करने का सबसे अच्छा तरीका क्या है?
मैंने SWIG के बारे में सुना है, लेकिन मैंने कभी इसका उपयोग नहीं किया है। क्या यह जेएनआई से आसान है? क्या कोई जानता है? – OscarRyz