2009-09-17 4 views
11

में सॉकेट के माध्यम से भेजा जा रहा है पूर्णांक क्या जावा में एक सॉकेट के माध्यम से एक पूर्णांक भेजने के लिए सबसे अच्छा संभव तरीका है? अभी मैंजावा

sockout.write((byte)(length >> 24)); 
sockout.write((byte)((length << 8) >> 24)); 
sockout.write((byte)((length << 16) >> 24)); 
sockout.write((byte)((length << 24) >> 24)); 

पर देख रहा हूँ और फिर दूसरी तरफ बाइट्स से पूर्णांक के पुनर्निर्माण की कोशिश कर रहा है, लेकिन यह काम करने के लिए प्रतीत नहीं होता। कोई विचार?

धन्यवाद।

+0

सामान्य तौर पर, अपने तरीके से भी काम करना चाहिए, लेकिन एडम जवाब बेहतर IMO है। हालांकि, ऐसा करने का नियमित तरीका है ((लंबाई >> i) और (बाइट) 0xff) जहां मैं (0, 8, 16, 24) में से एक है जो पूर्णांक के मूल मूल्य के मामले में आपको समस्याओं से बचाता है नकारात्मक। – abyx

उत्तर

3

धाराओं आप उपयोग कर सकते हैं, जो सीधे पूर्णांकों भेज सकते हैं अन्य प्रकार के होते हैं। आप DataOutputStream का उपयोग कर सकते हैं। ध्यान से देखें,

DataOutputStream out; 
try { 
    //create write stream to send information 
    out=new DataOutputStream(sock.getOutputStream()); 
} catch (IOException e) { 
    //Bail out 
} 

out.writeInt(5); 
26

अपने OutputStream एक DataOutputStream साथ लपेटें और फिर बस writeInt() विधि का उपयोग करें। बाकी

कुछ जो उपयोगी हो सकता है कि दूसरे छोर पर आप एक DataInputStream में हमारे InputStream लपेट और readInt() का उपयोग एक int वापस बाहर पढ़ने के लिए कर सकते हैं।

दोनों कक्षाएं भी पढ़ रहे हैं और अन्य कच्चे प्रकार के लेखन के लिए अन्य उपयोगी तरीकों की एक संख्या में होते हैं।

+0

स्पष्ट रूप से जिस तरह से किया जाना था। – abyx

+0

केवल तभी यदि दूसरे छोर के जावा भी हैं। –

+0

@ डेनिस टुल्स्की - दूसरा अंत कोई भी भाषा हो सकता है। DataOutputStream लगभग पूरी तरह से भाषा अज्ञेयवादी आउटपुट लिखता है (utf8 तारों को छोड़कर)। – jtahlborn

0

यदि आप डेटा की थोड़ी मात्रा भेज रहे हैं, तो चरित्र डेटा के रूप में एन्कोडिंग (उदा। Integer.toString(length)) और दूसरे छोर पर डिकोडिंग अनुचित नहीं है।