2013-02-06 19 views
6

मैंने हाल ही में जावा के साथ शुरुआत की और एक बड़े ऐप के जावा मॉड्यूल को समझना चाहते हैं। मैं जावा कोड की इस पंक्ति में आया:जावा में BufferedReader और इनपुटस्ट्रीम रीडर

String line = (new BufferedReader(new InputStreamReader(System.in))).readLine(); 

यह जावा कोड क्या करता है। क्या इसका सी/सी ++ बराबर है?

+4

यह टैग की गई सी ++ और सी क्यों है? –

+0

रैपर और रैपर।['इनपुटस्ट्रीम रीडर'] के जावाडोक पढ़ें (http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html) और ['BufferedReader'] (http://docs.oracle .com/javase/7/docs/api/java/io/BufferedReader.html) पहले। –

+2

सी ++ समकक्ष लगभग 'std :: स्ट्रिंग लाइन होगा; std :: getline (std :: cin, line); ' – jrok

उत्तर

9

System.in मानक इनपुट है।

InputStreamReader आपको निर्दिष्ट इनपुट (इस मामले में मानक इनपुट) से पढ़ने वाली स्ट्रीम को जोड़ने की अनुमति देता है, इसलिए अब हमारे पास एक स्ट्रीम है।

BufferedReader धाराओं के साथ काम करने में आपकी सहायता के लिए एक "अमूर्त" है। उदाहरण के लिए, यह चरित्र द्वारा वर्ण पढ़ने के बजाय readLine लागू करता है जब तक आपको पूरी लाइन प्राप्त करने के लिए '\ n' नहीं मिलता है। यह इस प्रक्रिया के बाद सिर्फ एक स्ट्रिंग देता है।

तो इस पंक्ति का अर्थ है: "मानक इनपुट से एक रेखा पढ़ें और इसे line चर में संग्रहीत करें"।

1

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

+2

BufferedReader का उपयोग' readLine() 'विधि के लिए है, जो इनपुटस्ट्रीम रीडर में मौजूद नहीं है। – davmac

4

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

BufferedReader

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

BufferedReader # ReadLine()

टेक्स्ट की पंक्ति में पढ़ें। लाइन लाइन ('\ n'), एक कैरिज रिटर्न ('\ r'), या एक कैरिज रिटर्न तुरंत लाइनफेड द्वारा पीछा किया जाता है।

InputStreamReader

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

सिस्टम

सिस्टम वर्ग कई उपयोगी वर्ग के खेतों और तरीकों में शामिल है। इसे तत्काल नहीं किया जा सकता है।

सिस्टम क्लास द्वारा प्रदान की जाने वाली सुविधाओं में मानक इनपुट, मानक आउटपुट और त्रुटि आउटपुट स्ट्रीम हैं; बाहरी परिभाषित "गुण" तक पहुंच; फाइलों और पुस्तकालयों को लोड करने का साधन; और एक सरणी के एक हिस्से को जल्दी से कॉपी करने के लिए एक उपयोगिता विधि।

System.in

"मानक" इनपुट स्ट्रीम। यह स्ट्रीम पहले से ही खुला है और इनपुट डेटा की आपूर्ति के लिए तैयार है। आम तौर पर यह स्ट्रीम मेजबान पर्यावरण या उपयोगकर्ता द्वारा निर्दिष्ट कीबोर्ड इनपुट या अन्य इनपुट स्रोत से मेल खाती है।

7

> What does this java code do:

String line अपने string object

new BufferedReader().readLine() एक BufferedReader का उदाहरण एक चरित्र इनपुट धारा से पाठ पढ़ने के लिए है, और readline() एक ऐसा तरीका है जो इसे एक न्यूलाइन चरित्र तक पढ़ने के लिए लागू करता है।

new InputStreamReader() आपको InputStreamReader का उदाहरण देता है जो बाइट स्ट्रीम में मानक के बीच "पुल" और BufferedReader चाहता है जो चरित्र धारा है।)
तो मैं मान लेंगे आप एक जवाब चाहते थे;

System.in मानक इनपुट (बाइट धारा)


> Is there a C/C++ equivalent of this
खैर ... वहाँ कोई भाषा C/C++ ... कहा जाता है उनमें से प्रत्येक के लिए।

सी में, वहाँ कोई "तार" कर रहे हैं आप एक चरित्र सरणी का उपयोग करना होगा, लेकिन आप की तरह कुछ के साथ stdin से एक चरित्र सरणी में डेटा पढ़ सकते हैं:

char input[100]; 
... 
scanf("%99[^\n]", input); 

या

fgets (input, 100 , stdin) 

सी ++ में, आप उपयोग करेंगे:

using namespace std; 

string line; 
getline(cin, line); 
1

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

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

शीर्ष दक्षता के लिए, हम एक BufferedReader के भीतर एक इनपुटस्ट्रीम रीडर को लपेटने पर विचार करते हैं। उदाहरण के लिए:

= BufferedReader में नया BufferedReader (नया इनपुटस्ट्रीम रीडर (System.in));

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

  • कोई संबंधित समस्या नहीं^_^