Відповіді:
Мета 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 :
Потік - це послідовність даних.
Програма використовує вхідний потік для зчитування даних з джерела, один за одним:
Програма використовує вихідний потік для запису даних до пункту призначення, один елемент одночасно:
Джерелом даних та пунктом призначення даних, зображеним вище, може бути все, що містить, генерує або споживає дані. Очевидно, це включає файли диска , але джерелом або пунктом призначення також може бути інша програма, периферійний пристрій, мережевий сокет або масив .
Приклад коду з підручника 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();
}
}
}
}
Ця програма використовує потоки байтів для копіювання 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 ++. Хороша метафора для потоків Яви - вода, що стікає з крана у ванну, а пізніше в каналізацію.
Дані представляють статичну частину потоку; методи читання і запису динамічної частини потоку.
InputStream
являє собою потік даних з джерела, OutputStream
являє собою потік даних у пункт призначення. Нарешті, InputStream
і OutputStream
це абстракції щодо доступу низького рівня до даних, таких як покажчики на файли C.
Потік : У термінах мирян потік - це дані, найбільш загальний потік - це двійкове представлення даних.
Вхідний потік : Якщо ви читаєте дані з файлу або будь-якого іншого джерела, використовуваний потік - це вхідний потік. Простіше кажучи, вхідний потік виступає як канал для зчитування даних.
Вихідний потік : Якщо ви хочете прочитати та обробити дані з джерела (файлу тощо), вам спочатку потрібно зберегти дані, середнє значення для зберігання даних - це вихідний потік.
Вихідний потік, як правило, пов'язаний з деяким пунктом призначення даних, наприклад, файлом або мережею і т.д.
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");
}
}