2009-12-02 9 views
216

कोई मुझे बताता है कि InputStream और OutputStream क्या हैं?इनपुटस्ट्रीम और आउटपुट स्ट्रीम क्या है? हम उन्हें कब और कब उपयोग करते हैं?

मैं InputStream और OutputStream दोनों के उपयोग के मामलों के बारे में उलझन में हूं।

यदि आप अपनी स्पष्टीकरण के साथ कोड के स्निपेट को भी शामिल कर सकते हैं, तो यह बहुत अच्छा होगा। धन्यवाद!

उत्तर

168

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

InputStream आपके द्वारा पढ़ी जाने वाली कई चीज़ों के लिए उपयोग किया जाता है।

OutputStream कई चीजों के लिए उपयोग किया जाता है जो आप लिखते हैं।

यहां कुछ नमूना कोड है। लिखने के लिए

int i; 

while ((i = instr.read()) != -1) { 
    osstr.write(i); 
} 

instr.close(); 
osstr.close(); 
+41

"स्ट्रीम" क्या है? –

+42

@ कोरय टुगे एक धारा को आम तौर पर वर्णों के सेट के रूप में परिभाषित किया जाता है। अधिक सटीक होने के लिए, एक से अधिक बिट या चरित्र को स्ट्रीम के रूप में जाना जाता है। –

9

आप इनपुट इनपुट से पढ़ते हैं और आउटपुटस्ट्रीम पर लिखते हैं।

उदाहरण के लिए, कहें कि आप एक फ़ाइल कॉपी करना चाहते हैं। आप नई फ़ाइल को लिखने के लिए स्रोत फ़ाइल और फ़ाइलऑटपुटस्ट्रीम से पढ़ने के लिए एक FileInputStream बनायेंगे।

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

InputStream input = ... // many different types 
OutputStream output = ... // many different types 

byte[] buffer = new byte[1024]; 
int n = 0; 
while ((n = input.read(buffer)) != -1) 
    output.write(buffer, 0, n); 

input.close(); 
output.close(); 
+3

'करीबी' हमेशा 'फ्लश', तो नहीं। – pstanton

5

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

यहाँ, एक फाइल करने के लिए डेटा लिखने के लिए तो यह में वापस पढ़ें FileOutputStream और FileInputStream का उपयोग करने का a good basic example है

80

InputStream पढ़ने के लिए प्रयोग किया जाता है, OutputStream: यह InputStream instr हो जाती है और OutputStream osstr पहले से ही बनाया गया है। वे एक दूसरे के लिए सजावटी के रूप में जुड़े हुए हैं ताकि आप सभी अलग-अलग प्रकार के स्रोतों से सभी प्रकार के डेटा को पढ़/लिख सकें।

उदाहरण के लिए, यदि आप एक फाइल करने के लिए आदिम डेटा लिख ​​सकते हैं:

File file = new File("C:/text.bin"); 
file.createNewFile(); 
DataOutputStream stream = new DataOutputStream(new FileOutputStream(file)); 
stream.writeBoolean(true); 
stream.writeInt(1234); 
stream.close(); 

लिखा सामग्री पढ़ने के लिए:

File file = new File("C:/text.bin"); 
DataInputStream stream = new DataInputStream(new FileInputStream(file)); 
boolean isTrue = stream.readBoolean(); 
int value = stream.readInt(); 
stream.close(); 
System.out.printlin(isTrue + " " + value); 

आपको स्ट्रीम के अन्य प्रकार का उपयोग कर सकते पढ़ने/लिखने बढ़ाने के लिए।उदाहरण के लिए, आप दक्षता के लिए एक बफर लागू कर सकते हैं:

DataInputStream stream = new DataInputStream(
    new BufferedInputStream(new FileInputStream(file))); 

आप इस तरह की वस्तुओं के रूप में अन्य डेटा लिख ​​सकते हैं:

MyClass myObject = new MyClass(); // MyClass have to implement Serializable 
ObjectOutputStream stream = new ObjectOutputStream(
    new FileOutputStream("C:/text.obj")); 
stream.writeObject(myObject); 
stream.close(); 

आप अन्य विभिन्न इनपुट स्रोतों से पढ़ सकते हैं:

byte[] test = new byte[] {0, 0, 1, 0, 0, 0, 1, 1, 8, 9}; 
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(test)); 
int value0 = stream.readInt(); 
int value1 = stream.readInt(); 
byte value2 = stream.readByte(); 
byte value3 = stream.readByte(); 
stream.close(); 
System.out.println(value0 + " " + value1 + " " + value2 + " " + value3); 

अधिकांश इनपुट धाराओं के लिए एक आउटपुट स्ट्रीम भी है। आप विशेष चीजों को पढ़ने/लिखने के लिए अपनी खुद की धाराओं को परिभाषित कर सकते हैं और जटिल चीजों को पढ़ने के लिए जटिल धाराएं हैं (उदाहरण के लिए ज़िप प्रारूप पढ़ने/लिखने के लिए स्ट्रीम हैं)।

22

Java Tutorial से:

एक धारा डेटा का एक क्रम है।

एक कार्यक्रम एक इनपुट धारा का उपयोग करता है डेटा स्रोत से, एक समय में एक आइटम को पढ़ने के लिए:

enter image description here

एक कार्यक्रम गंतव्य के लिए डेटा लिखने के लिए एक निर्गम धारा का उपयोग करता है समय में, एक आइटम:

enter image description here

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

नमूना code:

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

public class CopyBytes { 
    public static void main(String[] args) throws IOException { 

     FileInputStream in = null; 
     FileOutputStream out = null; 

     try { 
      in = new FileInputStream("xanadu.txt"); 
      out = new FileOutputStream("outagain.txt"); 
      int c; 

      while ((c = in.read()) != -1) { 
       out.write(c); 
      } 
     } finally { 
      if (in != null) { 
       in.close(); 
      } 
      if (out != null) { 
       out.close(); 
      } 
     } 
    } 
} 

इस कार्यक्रम के एक समय में एक बाइट लिख कर outagain.txt, को xanadu.txt फ़ाइल की प्रतिलिपि करने बाइट स्ट्रीम का प्रयोग करता

उन्नत चरित्र धाराओं के बारे में अधिक जानकारी जानने के लिए इस एसई प्रश्न पर एक नज़र डालें, जो बाइट स्ट्रीम के शीर्ष पर रैपर हैं:

byte stream and character stream

0

एक उत्पादन धारा आम तौर पर एक फ़ाइल या एक नेटवर्क etc.In जावा उत्पादन धारा की तरह कुछ डेटा गंतव्य से संबंधित है एक गंतव्य जहां डाटा अंत में लिखा है और यह

import java.io.printstream; 

class PPrint { 
    static PPrintStream oout = new PPrintStream(); 
} 

class PPrintStream { 
    void print(String str) { 
     System.out.println(str) 
    } 
} 

class outputstreamDemo { 
    public static void main(String args[]) { 
     System.out.println("hello world"); 
     System.out.prinln("this is output stream demo"); 
    } 
} 
0

समाप्त होता है स्ट्रीम: लेमेन शब्द स्ट्रीम में डेटा है, अधिकांश सामान्य धारा डेटा का द्विआधारी प्रतिनिधित्व है।

इनपुट स्ट्रीम: यदि आप किसी फ़ाइल या किसी अन्य स्रोत से डेटा पढ़ रहे हैं, तो स्ट्रीम स्ट्रीम इनपुट स्ट्रीम है।एक सरल शब्दों में इनपुट स्ट्रीम डेटा पढ़ने के लिए एक चैनल के रूप में कार्य करता है।

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

0

एक धारा तरल, वायु या गैस का निरंतर प्रवाह है।

जावा स्ट्रीम किसी स्रोत या गंतव्य से डेटा का प्रवाह है। स्रोत या गंतव्य डिस्क, मेमोरी, सॉकेट या अन्य प्रोग्राम हो सकता है। डेटा बाइट्स, वर्ण, या ऑब्जेक्ट्स हो सकता है। यह सी # या सी ++ धाराओं के लिए भी लागू होता है। जावा धाराओं के लिए एक अच्छा रूपक एक नल से बाथटब में बहने वाला पानी और बाद में जल निकासी में बह रहा है।

डेटा स्ट्रीम के स्थिर भाग का प्रतिनिधित्व करता है; पढ़ने और लिखने के तरीके धारा के गतिशील भाग।

InputStream स्रोत से डेटा के प्रवाह का प्रतिनिधित्व करता है, OutputStream गंतव्य में डेटा के प्रवाह का प्रतिनिधित्व करता है। अंत में, InputStream और OutputStream सी फ़ाइल पॉइंटर्स जैसे डेटा के निम्न-स्तर तक पहुंच पर अबास्ट्रक्शन हैं।

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