java - when write of OutputStream write bytes(internally), then why read of InputStream returns int? -
MyWriter.java (MyReader.java से पहले इसे निष्पादित करें)
< कोड> आयात करें java.io. *; Java.net आयात करें। *; Import java.util। *; सार्वजनिक वर्ग माइर्व्रेटर {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) अपवाद {ServerSocket ss = new ServerSocket (1234); System.out.println ("सर्वर शुरू हुआ ... \ n \ n"); सॉकेट s = ss.accept (); आउटपुटस्ट्रीम आउट = s.getOutputStream (); स्कैनर स्कैन = नया स्कैनर (System.in); जबकि (सच) {System.out.print ("पूर्णांक दर्ज करें (या कुछ और छोड़ने के लिए):"); कोशिश {int i = scan.nextInt (); आउट.लिखित (i); } पकड़ (रनटाइम एक्सेप्शन आरटीए) {System.out.println ("\ n \ n"); Rte.printStackTrace (); System.out.println ("\ n \ n"); टूटना ; }}}}
MyReader.java (केवल निष्पादित, जब MyWriter.java के साथ किया जाता है)
import java.io । *; Java.net आयात करें। *; Import java.util। *; सार्वजनिक कक्षा मायआरमेडर {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) अपवाद फेंकता {सॉकेट एस = नया सॉकेट ("लोकलहोस्ट", 1234); InputStream है = s.getInputStream (); Int i; जबकि ((i = is.read ())! = -1) {System.out.println ("चरित्र प्रपत्र:" + (चार) i + ", int रूप:" + i); }}}
समस्या: MyReader समाप्त नहीं हो रहा है, भले ही मैं MyWriter में -1 पास कर रहा हूं।
रिटर्न एक int
देता है ताकि यह स्ट्रीम के अंत का संकेत भी कर सके, जैसा कि - 1। यदि हस्ताक्षर समाप्त हो गए थे तो
तब आप कभी नहीं जान पाएंगे कि धारा समाप्त हो गई है (जब तक कि यह कोई अपवाद फेंका, मुझे लगता है) ।
मुझे संदेह है कि लिखने
के लिए कोई विशेष कारण नहीं है int
- यह मुझे थोड़ा अजीब विकल्प लगता है जवाडॉक विशेष रूप से कहता है कि उच्च 24 बिट्स को नजरअंदाज कर दिया जाता है। हो सकता है कि यह सिर्फ इतिहास का एक दुर्घटना है।
(.नेट में, स्ट्रीम। रीडबाइट
एक int
देता है, लेकिन stream.WriteByte < / Code> एक
बाइट
लेता है। यह अधिक समझ में आता है IMO।)
अब, उस पृष्ठभूमि के साथ, जब आप अपनी स्ट्रीम में "-1" लिखते हैं, तो आप वास्तव में लिख रहे हैं मूल्य "255" - और यही वह है जो आपने पढ़ा है। "-1" द्विआधारी में "सभी 1s" के रूप में दर्शाया जाता है, इसलिए उस के निचले 8 बिट "11111111" हैं जो कि 255 है जब एक अहस्ताक्षरित मान के रूप में माना जाता है।
आपका पाठक केवल तब समाप्त होगा जब आप बंद करेंगे "लेखन" अनुप्रयोग में आउटपुट स्ट्रीम - क्योंकि वह जब पढ़ा ()
वापस -1 होगा।
Comments
Post a Comment