什么是InputStream和输出stream? 为什么和什么时候使用它们?

有人向我解释什么是InputStreamOutputStream

我对InputStreamOutputStream的用例感到困惑。

如果你还可以包含一段代码来解释你的解释,那就太棒了。 谢谢!

InputStreamOutputStream的目标是抽象不同的input和输出方式:stream是文件,网页还是屏幕都不重要。 重要的是,您从stream中接收信息(或将信息发送到该stream中)。

InputStream用于读取许多内容。

OutputStream用于许多你写的东西。

这是一些示例代码。 它假定InputStream instrOutputStream osstr已经被创build:

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

InputStream用于读取,OutputStream用于写入。 它们作为装饰器彼此连接,以便您可以读取/写入来自所有不同types源的所有不同types的数据。

例如,您可以将原始数据写入文件:

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

您可以使用其他types的stream来增强读/写。 例如,您可以引入一个效率缓冲区:

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

您可以从其他不同的input源读取:

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

对于大多数inputstream,也有一个输出stream。 你可以定义你自己的stream来读/写特殊的东西,并且复杂的stream可以阅读复杂的东西(例如有读取/写入ZIP格式的stream)。

从Java教程 :

stream是一系列数据。

程序使用inputstream从源读取数据,每次一个项目:

在这里输入图像说明

程序使用输出stream将数据写入目标,每次一个项目:

在这里输入图像说明

上图中的数据源和数据目标可以是保存,生成或使用数据的任何东西。 显然这包括磁盘文件 ,但源或目标也可以是另一个程序,外围设备,networking套接字或arrays

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

此程序使用字节stream将xanadu.txt文件复制到outagain.txt一次写入一个字节

看看这个SE问题,了解关于高级字符stream的更多细节,它们是字节stream之上的包装器:

字节stream和字符stream

您从InputStream中读取并写入OutputStream。

例如,说你想复制一个文件。 你将创build一个FileInputStream来读取源文件和一个FileOutputStream来写入新文件。

如果您的数据是字符stream,则可以使用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类,它们写出某些东西(如屏幕,文件或字节数组或networking连接等)。 InputStream类访问相同的东西,但他们从中读取数据。

下面是使用FileOutputStream和FileInputStream将数据写入文件然后重新读入的一个很好的基本示例 。

输出stream通常与某些数据目标(如文件或networking等)有关。在java输出stream中,数据最终被写入的目的地并结束

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

stream :从外行来说stream是数据,大多数通用stream是数据的二进制表示。

inputstream :如果您正在从文件或其他来源读取数据,则使用的stream是inputstream。 简单来说,inputstream作为读取数据的通道。

输出stream :如果你想读取和处理源(文件等)的数据,你首先需要保存数据,存储数据的意思是输出stream。