Reader और InputStream में क्या अंतर है?


87

Reader और InputStream में क्या अंतर है? और कब क्या उपयोग करना है? अगर मैं रीडर्स को कैरेक्टर पढ़ने के लिए इस्तेमाल कर सकता हूं तो मैं इनपुटस्ट्रीम का इस्तेमाल क्यों करूंगा, मुझे लगता है कि मैं ऑब्जेक्ट्स को पढ़ता हूं?


3
"मैं वस्तुओं को पढ़ने का अनुमान लगाता हूं?", जावा वस्तुओं को पढ़ने / लिखने के लिए विशेष इनपुट / आउटपुट स्ट्रीम हैं। वे क्रमशः ObjectInputStream और ObjectOutputStream हैं, और बड़े क्रमांकन ढांचे का हिस्सा हैं। java.sun.com/developer/technicalArticles/Programming/… लेकिन यह कि इनपुट / आउटपुट स्ट्रीम का केवल एक ही उपयोग है, अन्य एक सॉकेट पर डेटा भेज सकते हैं, आदि
Mark पीटर्स

जवाबों:


138

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

एक रीडर चरित्र धाराओं के लिए डिज़ाइन किया गया है। यदि आप जो जानकारी पढ़ रहे हैं वह सभी पाठ है, तो पाठक आपके लिए वर्ण डिकोडिंग का ध्यान रखेगा और आपको कच्चे इनपुट स्ट्रीम से यूनिकोड वर्ण देगा। यदि आप किसी भी प्रकार का पाठ पढ़ रहे हैं, तो यह उपयोग करने की धारा है।

आप InputStreamReader वर्ग का उपयोग करके एक InputStream को लपेट कर उसे रीडर में बदल सकते हैं।

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);

निर्दोष जवाब बेरिन! धन्यवाद!
गौरव

18

एक स्ट्रीम से बाइट्स पढ़ने के लिए InputStream का उपयोग किया जाता है। इसलिए वे बाइनरी डेटा के लिए उपयोगी हैं जैसे कि चित्र, वीडियो और क्रमबद्ध ऑब्जेक्ट।

दूसरी ओर पाठक चरित्र धाराएँ हैं इसलिए उनका उपयोग चरित्र डेटा पढ़ने के लिए किया जाता है।


read()बाइट का उपयोग कब करें और बाइट का उपयोग कब करें read(byte[])। जैसा कि मुझे लगता है कि पढ़ना सरणी हमेशा बेहतर होती है। तब आप मुझे उदाहरण दे सकते हैं कि read()बाइट द्वारा बाइट का उपयोग कहां किया जाता है या बाइट का read(byte[])सरणी। या BufferedInputStream?
आसिफ मुश्ताक

11

मुझे लगता है कि भ्रम का स्रोत ए InputStream.read()रिटर्न है intऔर Reader.read()रिटर्न भी ए int

अंतर यह है कि InputStream.read()बाइट स्ट्रीम के कच्चे माल के लिए 0 और 255 के बीच के बाइट मानों को Reader.read()लौटाएं और वर्ण मान लौटाएं जो कि 0 और 65357 के बीच है (क्योंकि 65358 अलग-अलग यूनिकोड कोड पॉइंट हैं)

एक InputStreamआप पढ़ सकते हैं सामग्री, बाइट द्वारा बाइट उदाहरण के लिए सामग्री की सुविधा देता है "एक ‡ एक" 5 बाइट (हर एक एक के रूप में प्रतिनिधित्व की एक धारा के रूप में पढ़ा रहे हैं int0 और 255 के बीच) है, जिसके परिणामस्वरूप में 97, 226, 128, 161और 97जहां

a -> U+0061 -> 0x61 (hex) -> 97 (dec)
‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161 (1 int per byte)
a -> U+0061 -> 0x61 (hex) -> 97 (dec)

A Readerआपको कंटेंट कैरेक्टर को कैरेक्टर द्वारा पढ़ने देता है इसलिए कंटेंट "a" को 3 कैरेक्टर के रूप में पढ़ा जाता है 97, 8225और 97कहां

a -> U+0061 -> 0x61 -> 97
‡ -> U+2021 -> 0x2021 -> 8225 (single int, not 3)
a -> U+0061 -> 0x61 -> 97

चरित्र Un को यूनिकोड में U + 2021 के रूप में संदर्भित किया गया है


यह स्वीकृत उत्तर होना चाहिए। उदाहरण के लिए धन्यवाद
एलेरिया

2

InputStream और रीडर की पृष्ठभूमि:

जावा के शुरुआती दिनों में, कंसोल इनपुट करने का एकमात्र तरीका एक बाइट स्ट्रीम (InputStream और OutputStream) का उपयोग करना था।

बक्सों का इस्तेमाल करें:

आज, कंसोल स्ट्रीम पढ़ने के लिए बाइट स्ट्रीम का उपयोग करना भी स्वीकार्य है। हालांकि, वाणिज्यिक अनुप्रयोगों के लिए, कंसोल इनपुट पढ़ने के लिए पसंदीदा तरीका चरित्र-उन्मुख धारा (रीडर) का उपयोग करना है। पाठक आपके अंतर्राष्ट्रीयकरण और रखरखाव को आसान बनाता है।

नोट: यह जावा I / O कोड की खोज के लिए सिर्फ एक अतिरिक्त जानकारी है, यह है कि Java I / O कार्यान्वयन का डिज़ाइन पैटर्न डेकोरेटर डिज़ाइन पैटर्न का अनुसरण करता है। यदि आप डेकोरेटर डिज़ाइन पैटर्न से परिचित हैं तो आप कार्यान्वयन को आसानी से पकड़ सकते हैं।


1

एक बाइट्स स्वीकार करता है और दूसरा अक्षर स्वीकार करता है।


0

InputStream स्वीकार बाइट accept रीडर चरित्र स्वीकार करता है, जावा में, एक वर्ण = दो बाइट्स, और रीडर बफर का उपयोग करता है, InputStream उपयोग नहीं करता है। बाइट के आधार पर डिस्क या ट्रांसफर में सभी फ़ाइल स्टोर में छवि और वीडियो शामिल हैं, लेकिन चरित्र स्मृति में है, इसलिए इनपुटस्ट्रीम अक्सर उपयोग किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.