2011-08-08 17 views
13

मैं अभी भी सॉकेट के लिए अपेक्षाकृत नया हूं, और मैंने इस विषय के बारे में कोई जानकारी नहीं देखी है।जावा सॉकेट: डेटाऑटपुटस्ट्रीम या आउटपुटस्ट्रीम?

एक जुड़ा सॉकेट को लिखने के लिए, आपको

socket.getOutputStream().write 

उपयोग कर सकते हैं या सॉकेट OutputStream से एक नया DataOutputStream बना सकते हैं और है कि लिखें।

  • डेटाऑटपुटस्ट्रीम या आउटपुटस्ट्रीम का उपयोग करके "अच्छा अभ्यास" माना जाता है? the examples अधिकांश इंटरनेट उपयोग डेटाऑटपुटस्ट्रीम (स्ट्रिंग्स भेजने के लिए, जैसे कि दो तरह की चैट में) पर मिलता है।
  • क्या आउटपुटस्ट्रीम पर डेटाऑटपुटस्ट्रीम का उपयोग करने से कोई फायदे या नुकसान हैं?
  • क्या प्रदर्शन में कोई अंतर है जो इन दोनों के बीच ध्यान देने योग्य है, उदाहरण के लिए, फाइलें भेजना?

उत्तर

10

DataOutputStream सुनिश्चित करता है कि डेटा एक प्लेटफार्म स्वतंत्र तरीके से स्वरूपित है। यह बड़ा फायदा है। यह सुनिश्चित करता है कि दूसरी तरफ पार्टी इसे पढ़ने में सक्षम होगी। दोनों के बीच कोई महत्वपूर्ण प्रदर्शन अंतर नहीं है।

यदि आप कच्चे बाइनरी डेटा को स्थानांतरित करते हैं तो आपको OutputStream का उपयोग करना चाहिए।

+0

तो यदि आप एक मंच-स्वतंत्र जावा एप्लिकेशन बनाना चाहते हैं जो फाइल भेज सकता है तो आप क्या सुझाव देंगे? – David

+0

भले ही फ़ाइलों में केवल कच्चे बाइट होते हैं, फिर भी आप उन्हें डेटाऑटपुटस्ट्रीम के साथ भेज सकते हैं, इसलिए मैं सभी मामलों में DataOuputStream के लिए जाऊंगा। – JVerstry

+0

'डेटाऑटपुटस्ट्रीम' केवल 'सुनिश्चित करता है कि डेटा प्लेटफार्म-स्वतंत्र तरीके से स्वरूपित है' यदि आप अतिरिक्त एपीआई का उपयोग करते हैं तो इसका उपयोग करें। इसकी 'लेखन() 'विधियों में जादुई गुण नहीं हैं। यदि आप केवल उन का उपयोग कर रहे हैं, (ए) बिल्कुल कोई प्रदर्शन अंतर नहीं है, और (बी) 'डेटाऑटपुटस्ट्रीम' का उपयोग करने में कोई बात नहीं है। यदि आप अतिरिक्त एपीआई का उपयोग कर रहे हैं तो इसके प्रदर्शन की तुलना करने के लिए कुछ भी नहीं है। तो प्रदर्शन मतभेदों के बारे में बयान मूल रूप से अर्थहीन है। – EJP

2

यदि आपको अतिरिक्त API की आवश्यकता है तो DataOutputStream का उपयोग करें। यदि आप नहीं करते हैं, तो कोई बात नहीं है। लेकिन यदि आप छोटे लिखते हैं, और flush() उपयुक्त होने पर आपको सॉकेट की आउटपुट स्ट्रीम को BufferedOutputStream में हमेशा लपेटना चाहिए, उदाहरण के लिए सॉकेट पढ़ने से पहले।

-1

बस मुझे एसओएपी सेवाओं के साथ काम करते समय डेटाआउटपुटस्ट्रीम और आउटपुटस्ट्रीमराइटर के बीच एक अंतर पता चला ... मैंने अनुरोध एक्सएमएल के माध्यम से अरबी डेटा पास करने की कोशिश की लेकिन प्रतिक्रिया एक्सएमएल में मुझे अरबी के स्थान पर कुछ जंक पात्र मिल रहे हैं डेटा के बाद मैंने अनुरोध (यूटीएफ -8) को एन्कोड करने की कोशिश की लेकिन डेटाऑटपुटस्ट्रीम में एन्कोड करने की कोई ऐसी विधि नहीं है, जहां आप अनुरोध भेजने से पहले आउटपुटस्ट्रीमवाइटर में अनुरोध को एन्कोड कर सकते हैं। आउटपुटस्ट्रीमवाइटर आउट = नया आउटपुटस्ट्रीमवाइटर (con.getOutputStream(), "यूटीएफ -8"); out.write (inputXML);

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