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


290

कोई मुझे समझाए कि क्या हैं InputStreamऔर क्या OutputStreamहैं?

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

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

जवाबों:


218

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

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

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

यहाँ कुछ नमूना कोड है। यह मानता है InputStream instrऔर OutputStream osstrपहले से ही बनाया गया है:

int i;

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

instr.close();
osstr.close();

67
"स्ट्रीम" क्या है?
कोरे तुगे

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

14
एक से अधिक चरित्र स्ट्रिंग भी है। स्ट्रिंग से क्या अंतर होता है?
प्रजीत श्रेष्ठ

मुझे लगता है कि एक धारा सिर्फ शून्य और है।, वर्ण नहीं।
स्माइलीफेस

93

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

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

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);

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


35

से जावा ट्यूटोरियल :

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

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

यहां छवि विवरण दर्ज करें

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

यहां छवि विवरण दर्ज करें

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

ओरेकल ट्यूटोरियल से नमूना कोड :

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();
            }
        }
    }
}

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

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

बाइट स्ट्रीम और कैरेक्टर स्ट्रीम


9

आप एक InputStream से पढ़ते हैं और एक OutputStream में लिखते हैं।

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

यदि आपका डेटा एक कैरेक्टर स्ट्रीम है, तो यदि आप चाहें, तो आप एक InputRream के बजाय एक FileReader और एक OutputWream के बजाय एक FileWriter का उपयोग कर सकते हैं।

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
closeहमेशा flushतों, तो नहीं।
pstanton

5

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

फ़ाइल में डेटा लिखने के लिए FileOutputStream और FileInputStream का उपयोग करने का एक अच्छा बुनियादी उदाहरण है, फिर इसे वापस पढ़ें।


4

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

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

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

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


2

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

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

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


0

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

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");
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.