Что такое InputStream & Output Stream? Почему и когда мы их используем?


кто-нибудь объясните мне, что InputStream и OutputStream есть?

Я запутался в случаях использования для обоих InputStream и OutputStream.

если бы вы также могли включить фрагмент кода, чтобы пойти вместе с вашим объяснением, это было бы здорово. Спасибо!

8 237

8 ответов:

цель InputStream и OutputStream это абстрагирование различных способов ввода и вывода: является ли поток файлом, веб-страницей или экраном, не имеет значения. Все, что имеет значение, это то, что вы получаете информацию из потока (или отправляете информацию в этот поток.)

InputStream используется для многих вещей, которые Вы читаете.

OutputStream используется для многих вещей, которые вы напишите.

вот пример кода. Он предполагает InputStream instr и OutputStream osstr есть уже создано:

int i;

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

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

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

для большинства входных потоков также существует выходной поток. Вы можете определить свои собственные потоки для чтения / записи специальных вещей, и есть сложные потоки для чтения сложных вещей (например, есть потоки для чтения/записи формата ZIP).

С Java Tutorial:

поток-это последовательность данных.

программа использует входной поток для чтения данных из источника, по одному элементу за раз:

enter image description here

программа использует выходной поток для записи данных в пункт назначения, по одному элементу за раз:

enter image description here

источник данных и местом назначения данных, изображенным выше, может быть все, что содержит, генерирует или потребляет данные. Очевидно, это включает в себя диск, но и источник или пункт назначения также может быть другая программа, периферийное устройство, сетевой сокет или массив.

пример код из учебника oracle:

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

эта программа использует потоки байтов, чтобы скопировать Ксанаду.txt до outagain.txt, by писать по одному байту за раз

взгляните на этот вопрос SE, чтобы узнать более подробную информацию о расширенных символьных потоках, которые являются оболочками поверх байтовых потоков:

поток байтов и поток символов

Вы читаете из InputStream и записываете в OutputStream.

например, скажем, вы хотите скопировать файл. Вы создадите FileInputStream для чтения из исходного файла и FileOutputStream для записи в новый файл.

Если ваши данные являются потоком символов, вы можете использовать FileReader вместо InputStream и FileWriter вместо OutputStream, если вы предпочитаете.

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

OutputStream-это абстрактный класс, представляющий вывод записи. Существует много различных классов OutputStream, и они записывают определенные вещи (например, экран, или файлы, или массивы байтов, или сетевые соединения, или т. д.). Классы InputStream имеют доступ к тем же самым вещам, но они читают данные из них.

здесь хороший базовый пример использования FileOutputStream и FileInputStream для записи данных в файл, а затем прочитать его обратно.

поток-это непрерывный поток жидкости, воздуха или газа.

поток Java-это поток данных из источника или в пункт назначения. Источником или назначением могут быть диск, память, сокет или другие программы. Данные могут быть байтами, символами или объектами. То же самое относится и к потокам C# или C++. Хорошая метафора для потоков Java-это вода, текущая из крана в ванну, а затем в дренаж.

данные представляют статическую часть поток; методы чтения и записи динамическая часть потока.

InputStream представляет собой поток данных из источника,OutputStream представляет собой поток данных в пункт назначения. Наконец,InputStream и OutputStream являются абстракциями над низкоуровневым доступом к данным, таким как указатели на файлы C.

выходной поток обычно связан с некоторым местом назначения данных, таким как файл или сеть etc.In выходной поток java-это место назначения, где данные в конечном итоге записываются и заканчиваются

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

поток: в терминах непрофессионалов поток-это данные, наиболее общий поток-это двоичное представление данных.

Входной Поток : Если Вы читаете данные из файла или любого другого источника, используется входной поток. В более простых терминах входной поток действует как канал для чтения данных.

Выходной Поток : Если вы хотите читать и обрабатывать данные из источника (файла и т. д.), вам сначала нужно сохранить данные , среднее значение для хранения данных выходной поток.