Ответы:
Цель 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).
Поток - это последовательность данных.
Программа использует входной поток для чтения данных из источника, по одному элементу за раз:
Программа использует выходной поток для записи данных в пункт назначения, по одному элементу за раз:
Источник данных и пункт назначения данных, изображенные выше, могут быть любыми данными, которые содержат, генерируют или потребляют данные. Очевидно, что это включает в себя файлы на диске , но источником или местом назначения также может быть другая программа, периферийное устройство, сетевой сокет или массив .
Пример кода из руководства по оракулу:
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, чтобы узнать больше о продвинутых символьных потоках, которые являются обертками поверх байтовых потоков:
вы читаете из 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();
close
всегда есть flush
, так что нет.
OutputStream - это абстрактный класс, который представляет выходные данные записи. Существует много различных классов OutputStream, и они записывают определенные вещи (например, экран, файлы, байтовые массивы, сетевые подключения и т. Д.). Классы InputStream имеют доступ к одним и тем же вещам, но они считывают данные из них.
Вот хороший базовый пример использования FileOutputStream и FileInputStream для записи данных в файл и последующего чтения.
Поток - это непрерывный поток жидкости, воздуха или газа.
Поток Java - это поток данных из источника в пункт назначения. Источником или местом назначения может быть диск, память, сокет или другие программы. Данные могут быть байтами, символами или объектами. То же самое относится к потокам C # или C ++. Хорошая метафора для потоков Java - вода, вытекающая из крана в ванну, а затем в дренаж.
Данные представляют статическую часть потока; методы чтения и записи - динамическая часть потока.
InputStream
представляет поток данных из источника, OutputStream
представляет поток данных в пункт назначения. Наконец, InputStream
и OutputStream
есть абстракции низкоуровневого доступа к данным, такие как указатели на C-файл.
Поток : в терминах непрофессионалов поток - это данные, наиболее общий поток - это двоичное представление данных.
Входной поток : если вы читаете данные из файла или любого другого источника, используется поток ввода. Проще говоря, входной поток действует как канал для чтения данных.
Выходной поток : если вы хотите прочитать и обработать данные из источника (файла и т. Д.), Вам сначала нужно сохранить данные, а средством хранения данных является выходной поток.
Выходной поток, как правило, связан с некоторым назначением данных, таким как файл, сеть и т. Д. В выходном потоке 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");
}
}