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

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

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

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

Ответ 1

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

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

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

Вот пример кода. Предполагается, что InputStream instr и OutputStream osstr уже созданы:

int i;

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

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

Ответ 2

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

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

Ответ 3

Из Учебник по Java:

Поток представляет собой последовательность данных.

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

введите описание изображения здесь

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

введите описание изображения здесь

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

Пример 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();
            }
        }
    }
}

Эта программа использует потоки байтов для копирования файла xanadu.txt в outagain.txt путем записи одного байта за раз

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

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

Ответ 4

вы читаете из 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();

Ответ 5

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

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

Ответ 6

Выходной поток, как правило, связан с некоторым местом назначения данных, например файлом или сетью и т.д. В потоке вывода 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");
    }
}

Ответ 7

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

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

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