2009-03-04 11 views
5

मैं कुछ जावा < -> पर्ल इंटरैक्शन पर काम कर रहा हूं। मैं जानना चाहता हूं कि पर्ल से जावा तक जानकारी पास करने का सबसे अच्छा तरीका क्या है। (पर्ल और जावा here और here बीटीडब्ल्यू के बारे में महान उत्तर)।मैं पर्ल से जावा तक डेटा कैसे पास कर सकता हूं?

वहाँ पाठ और एक्सएमएल एक स्क्रिप्ट में (XML :: टहनी) मैं पर्ल में पार्स करने रहा हूँ, का एक बहुत कुछ है मैं एक जावा वेब अनुप्रयोग से कॉल करने के लिए माना जाता रहा हूँ। तो मेरे पास यह सब एकत्रित डेटा है, और मुझे इसे जावा में कुछ ऑब्जेक्ट्स के अंदर उपयोग करने की आवश्यकता है।

पर्ल से जावा तक जानकारी भेजने के लिए एक अच्छी रणनीति क्या हो सकती है? क्या पर्ल से जावा तक किसी वस्तु या अन्य संगत डेटा संरचना को वापस करना संभव है?

मुझे लगता है कि एक टेक्स्ट फ़ाइल में लिखना और जावा से इसे पढ़ना पर्ल अर्थहीन द्वारा उपयोग किए जाने वाले सभी अनुकूलन को प्राप्त करेगा।

पर्फॉर्मेंस यहां एक महत्वपूर्ण मुद्दा है।

संपादित करें: से मैं क्या here देखा है, हो सकता है इनलाइन-जावा एक अच्छा विकल्प हो सकता है?

+0

ताकि आप पर्ल में अपने पुराने जावा कोड बनाने की कोशिश कर रहे हैं? – TStamper

+0

1. कोशिश JSON 2. पर्ल से छुटकारा पाने के लिए, और जावा का उपयोग केवल :) –

+0

मुझे लगता है कि प्रश्न के पद के माध्यम से पढ़ रहा था और यह JSON, इनलाइन-जावा, खुले टीसीपी कनेक्शन और हस्तांतरण डेटा का उपयोग करने की सिफारिश की थी और अंत में सीधे एक्सएमएल पास करें। * सुझाए गए दृष्टिकोणों में से कौन सा बेहतर है? * क्या ऐसा करने के लिए अन्य बेहतर विकल्प हैं, वेब सेवाओं या किसी अन्य सुझाव के बारे में क्या? – Rachel

उत्तर

5

यदि प्रदर्शन महत्वपूर्ण है मैं एक लगातार पर्ल प्रक्रिया चल होने की सलाह देते हैं। हर बार जब आप अपना कोड चलाने के लिए एक पर्ल दुभाषिया शुरू करना काफी ओवरहेड होगा।

संवाद करने के लिए सबसे आसान तरीका है जावा प्रक्रिया, पर्ल processs करने के लिए एक TCP कनेक्शन को खोलने के लिए कुछ डेटा लिखने और कुछ वापस पाने के लिए है।

प्रारूप है कि आप अपने जावा एक करने के लिए अपने पर्ल प्रक्रिया पीछे से डेटा भेजने के लिए आप क्या भेज रहे हैं और कैसे सामान्य और फिर से प्रयोग करने योग्य आप अपने कोड होना चाहते हैं पर निर्भर करेगा का उपयोग करें। एक्सएमएल स्ट्रिंग्स को वापस भेजना अच्छा और सामान्य होगा लेकिन पर्ल में pack के साथ बनाए गए बाइट एरे को वापस भेजना होगा और फिर जावा में DataInputStream के साथ पढ़ना बहुत तेज होगा।

+0

आप वास्तव में इस तरह इनलाइन :: जावा का उपयोग कर सकते हैं। यह एक जेवीएम प्रक्रिया बना सकता है जो आपकी पर्ल प्रक्रिया के साथ संचार करता है। यह एक कस्टम प्रारूप या पाठ्यक्रम है, लेकिन यह आपको पर्ल में मूल जावा ऑब्जेक्ट्स का उपयोग करने देता है और इसके विपरीत – mpeters

2

अगर आप पहले से ही एक्सएमएल मिल गया है, आपका सबसे अच्छा विकल्प का उपयोग जारी रखने के लिए शायद है।

+0

हमारे पहले कार्यान्वयन में जावा पार्स एक्सएमएल था, लेकिन हमने पाया कि पर्ल ऐसा करने में बहुत तेज़ और अधिक प्रभावी है। तो हम उस नौकरी को पर्ल को व्युत्पन्न करने की कोशिश कर रहे हैं जो इससे बेहतर है। –

+0

यदि आप जावा की तुलना में एक्सएम एक्सएमएल को पार्स कर रहे हैं तो आप शायद कुछ अजीब कर रहे हैं। –

+0

हम XML फ़ाइलों को नेविगेट करने और नोड मान प्राप्त करने के लिए xPath का उपयोग कर रहे थे; लेकिन, पर्ल उस तरह के काम के लिए उन्मुख नहीं है (पाठ पार्सिंग और उस तरह की चीजें) ?? –

3

JSON आसपास डेटा पारित करने के लिए एक आसान, हल्के स्वरूप है।

आप Rhino या अपने टूलकिट के समान कुछ जोड़ सकते हैं और अतिरिक्त प्रदर्शन प्राप्त कर सकते हैं (एक स्क्रिप्टिंग इंजन का उल्लेख नहीं करना), लेकिन यह इस बात पर निर्भर करेगा कि आप अपनी परियोजना की कितनी जटिल योजना बना रहे हैं।

0

मुझे यह भी अजीब लगता है कि एक्सएमएल पार्स करने के लिए आपका पर्ल कोड जावा में समकक्ष कोड से काफी तेज होगा। भले ही यह है, मैं कल्पना नहीं कर सकता कि यह कभी भी आईपीसी द्वारा किए गए ओवरहेड से तेज होगा। यहां तक ​​कि यदि आप लगातार पर्ल प्रक्रिया का उपयोग करते हैं, तो भी आपको इसे सॉकेट पर संभवतः डेटा भेजना होगा, फिर कुछ डेटा वापस प्राप्त करें, और आखिरकार इसे कुछ उपयोग करने योग्य बनाएं।

क्या आपने जावा में अपने एक्सएमएल पार्सिंग के प्रदर्शन में सुधार करने की कोशिश की है? यदि आप डीओएम या जेडीओएम या कैस्टर जैसी तीसरी पार्टी लाइब्रेरी का उपयोग कर रहे हैं, तो इसके बजाय SAX का उपयोग करने का प्रयास करें। या हो सकता है सिर्फ नियमित अभिव्यक्ति का उपयोग कर के बजाय XML पार्स करने के लिए तेजी से होगा (jwz notwithstanding)

किसी भी मामले में, मैं अपने जावा कोड के साथ एक प्रोफाइलर का उपयोग कर पहले देखने के लिए अगर यह सुधार किया जा सकता की सिफारिश करेंगे।

+1

एक शुद्ध पर्ल एक्सएमएल पार्सिंग लाइब्रेरी है, लेकिन कोई भी जो गति की परवाह नहीं करता है इसका उपयोग करता है। अधिकांश पर्ल एक्सएमएल पार्सिंग में हुड के तहत एक्सपैट या libxml2 शामिल होता है जो तेज़ होता है। – runrig

+0

मुझे नहीं पता कि यह कितना अंतर करने जा रहा है। भले ही कच्चे एक्सएमएल पार्सिंग काफी तेज़ हो, फिर भी आपको आईपीसी ओवरहेड मिल गया है। –

2

Inline::Java। एक बार जब आप इसे प्राप्त करते हैं और दौड़ते हैं तो यह वास्तव में अच्छा काम करता है।मैं कुछ साल पहले एक परियोजना पर काम कर रहा था जिसमें कुछ वास्तविक समय संचार के लिए एक जावा एसओएपी सर्वर से बात करते हुए एक पर्ल वेब एप्लिकेशन था और यह बहुत ही धीमा था। हमने संचार के लिए इनलाइन :: जावा का उपयोग कर सिस्टम के साथ इसे बदल दिया और यह बहुत तेज़ था। निश्चित रूप से उन बिंदुओं को कम करें जिन्हें आप आगे और आगे ऑब्जेक्ट पास करते हैं और चीजों को नियंत्रण से बाहर रखने से रोकने के लिए उन वस्तुओं को सरल बनाने के लिए प्रयास करते हैं (हम स्ट्रिंग्स, संख्याओं और सरणी से फंस जाते हैं)। लेकिन मैं निश्चित रूप से एक कन्वर्ट हूँ!

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