Что такое InputStream & Output Stream? Почему и когда мы их используем?
кто-нибудь объясните мне, что InputStream
и OutputStream
есть?
Я запутался в случаях использования для обоих InputStream
и OutputStream
.
если бы вы также могли включить фрагмент кода, чтобы пойти вместе с вашим объяснением, это было бы здорово. Спасибо!
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).
поток-это последовательность данных.
программа использует входной поток для чтения данных из источника, по одному элементу за раз:
программа использует выходной поток для записи данных в пункт назначения, по одному элементу за раз:
источник данных и местом назначения данных, изображенным выше, может быть все, что содержит, генерирует или потребляет данные. Очевидно, это включает в себя диск, но и источник или пункт назначения также может быть другая программа, периферийное устройство, сетевой сокет или массив.
пример код из учебника 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"); } }
поток: в терминах непрофессионалов поток-это данные, наиболее общий поток-это двоичное представление данных.
Входной Поток : Если Вы читаете данные из файла или любого другого источника, используется входной поток. В более простых терминах входной поток действует как канал для чтения данных.
Выходной Поток : Если вы хотите читать и обрабатывать данные из источника (файла и т. д.), вам сначала нужно сохранить данные , среднее значение для хранения данных выходной поток.