2012-12-01 15 views
5

निम्नलिखित कोड कोर जावा मात्रा 1.इनपुटस्ट्रीम और ByteArrayInputStream के बीच क्या अंतर है?

 ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    PrintStream printOut = new PrintStream(out); 
    printOut.print(panel.getText()); 
    //panel.getText() return a String 
    InputStream data = new ByteArrayInputStream(out.toByteArray()); 
    FileSaveService service = (FileSaveService) ServiceManager 
      .lookup("javax.jnlp.FileSaveService"); 
    service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt"); 

के जावा वेब शुरू अध्याय से निकाला जाता है बनाया चार वस्तुओं रहे हैं, धारा तीन बार पुनः निर्देशित किया गया है। क्या jnlp api का उपयोग कर फ़ाइल में डेटा लिखने के लिए कोई और तरीका है? इनपुटस्ट्रीम और ByteArrayInputStream के बीच क्या अंतर है?

+3

कंप्यूटर बहुत तेज़ हैं। कुछ भी "भयानक" नहीं होता है जब तक कि आपको इसे बहुत अधिक बार करने की आवश्यकता नहीं होती है, या इसका प्रदर्शन बहुत महत्वपूर्ण होता है। – JimN

+0

आपको शीर्षक बदलना चाहिए: यह डेटा दिनांक नहीं है। फिर फ़ाइल में 8 बाइट डेट टाइमस्टैंप लिखना भयानक होगा। – AlexWien

+0

मेरा मतलब है कि यह प्रोग्रामर के लिए बहुत जटिल है, कंप्यूटर नहीं। और मैं जानना चाहता हूं कि इस तरह से कोड करना आवश्यक है। – scobur

उत्तर

4

ByteArrayInputStream और ByteArrayOututStream उपयोग के लिए इन-मेमोरी कार्यान्वयन हैं जब आप अस्थायी रूप से डेटा को स्ट्रीम-स्ट्रीम में स्मृति में संग्रहीत करना चाहते हैं, फिर इसे कहीं और पंप करें।

उदाहरण के लिए, मान लें कि आप एक विधि है कि एक पैरामीटर के रूप में एक इनपुट स्ट्रीम की उम्मीद है, जैसे

public Document parseXml(InputStream in) // build an XML document from data read in 

जाने लेकिन आप इसे करने के लिए एक स्ट्रिंग का कहना है की सामग्री को भेजना चाहते हैं। फिर आप ByteArrayInputStream का उपयोग करेंगे और इसे अपने स्ट्रिंग की सामग्री से भरें और विधि में ByteArrayInputStream पास करें। यदि एक विधि एक निर्गम धारा में लिखते हैं


एक ByteArrayOutputStream उपयोग का एक उदाहरण हो सकता है, लेकिन आप केवल परिणाम पर कब्जा और इसे सीधे प्राप्त करना चाहते हैं।

0

इनपुट स्ट्रीम इनपुट धाराओं के लिए सामान्य इंटरफ़ेस है।
FileInputStream और ByteArrayInputStream दोनों इंटरफ़ेस को लागू करते हैं।

0

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

बहुरूपता अवधारणा की वजह से आप जैसे

InputStream data = new ByteArrayInputStream(out.toByteArray()); 

माता-पिता के लिए एक बच्चे को प्रदान कर सकते हैं तो अगर हम data.read (कॉल करेंगे) इसका मतलब यह है कि हम विधि पढ़ ByteArrayInputStream बुला रहे हैं क्योंकि ByteArrayInputStream प्रदान कर रहा है पढ़ने के कार्यान्वयन() जहां इनपुटस्ट्रीम विधि में पढ़ा जाता है() सार है।

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