java - DataInputStream readLong() is getting the wrong value -


नमस्ते मुझे readLong () विधि DataInputStream के साथ कुछ परेशानी हो रही है जब मैं DataOutputStream.writeLong () के माध्यम से एक मान डालता हूं तो यह सही मान है, लेकिन जब इसे भेजा जाता है, यह बहुत बड़ा है जैसा होना चाहिए, मेरे पास एक रननबल में कोड है स्टेटमेंट ताकि प्रोग्राम फ्रीज न हो

यह क्लाइंट है

  सॉकेट = नया सॉकेट (आईपीएड्रेस, पोर्ट); बोस = नया बफ़रऑप्टपुटस्ट्रीम (सॉकेट.गेटओटपुटस्ट्रीम ()); डॉस = नया डेटाओटपुटस्ट्रीम (बोस); फ़ाइल f = नया फ़ाइल ("सी: / यूज़र / एलयूकेप्पट / डाऊलोड / रिवॉववैट 22.ज़िप"); लंबी लंबाई = f.length (); dos.writeLong (लंबाई); स्ट्रिंग का नाम = f.getName (); dos.writeUTF (नाम); FileInputStream fis = नया FileInputStream (f); बीआईएस = नया बफ़र इनटस्टस्ट्रीम (एफआईएस); Int theByte = 0; जबकि ((thebite = bis.read ())! = -1) {bos.write (theByte); } Bis.close (); dos.close ();  

सर्वर साइड

  सर्वरसॉकेट सर्वर = नया सर्वरसॉकेट (8080); जबकि (सच) {socket = server.accept (); System.out.println ("एक ग्राहक मिला!"); बीआईएस = नया बफ़र इनटस्टस्ट्रीम (सॉकेट.जेट इन्पुटस्ट्रीम ()); Dis = नया डेटाइनपुटस्ट्रीम (बीआईएस); इंट फाइलों count = dis.readInt (); लंबी फ़ाइल लंबाई = dis.readLong (); // स्ट्रिंग फ़ाइलनाम = dis.readUTF (); फ़ाइल f = नया फ़ाइल ("C: /test/here/test.zip"); FileOutputStream fos = नया FileOutputStream (f); BufferedOutputStream बॉस = नया BufferedOutputStream (fos); के लिए (int j = 0; j & lt; fileLength; j ++) {bos.write (bis.read ()); } बोस। क्लोज़ (); dis.close ();  

संपादित करें

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

समस्या विधि writeUTF है।

कहते हैं:

लिखता है मशीन-स्वतंत्र तरीके से संशोधित UTF-8 एन्कोडिंग का उपयोग करते हुए अंतर्निहित आउटपुट स्ट्रीम में एक स्ट्रिंग।

सबसे पहले, दो बाइट आउटपुट स्ट्रीम में लिखे जाते हैं जैसे कि लिखने के लिए लघु विधि का पालन करने के लिए बाइट्स की संख्या । यह मान वास्तव में लिखित बाइट्स की संख्या है, स्ट्रिंग की लंबाई नहीं है। लंबाई के बाद, स्ट्रिंग के प्रत्येक अक्षर आउटपुट है, अनुक्रम में, चरित्र के लिए संशोधित UTF-8 एन्कोडिंग का उपयोग करते हुए। यदि कोई अपवाद नहीं फेंक दिया जाता है, तो लिखे गए काउंटर आउटपुट स्ट्रीम में लिखे गए बाइट्स की कुल संख्या से बढ़ा है। यह कम से कम दो से अधिक स्ट्रिंग की लंबाई होगी, और अधिकतर दो से अधिक तीन बार स्ट्रिंग की लंबाई होगी।

लेकिन आप अपनी लंबाई एन्कोडिंग का उपयोग करते हैं, जो केवल वर्णों की संख्या स्ट्रिंग में शामिल हैं यह आपकी स्ट्रिंग की एन्कोडेड लम्बाई का उपयोग नहीं करता है।

यदि आप अपनी स्ट्रिंग पढ़ने के लिए उपयोग करते हैं, तो आपको अपनी लंबाई एन्कोडिंग का उपयोग करने की आवश्यकता नहीं है।


Comments

Popular posts from this blog

ios - How do I use CFArrayRef in Swift? -

eclipse plugin - Run java code error: Workspace is closed -

c - Error on building source code in VC 6 -