IT-Swarm.Net

什么是的InputStream和OutputStream的?我们为何以及何时使用它们?

有人向我解释InputStreamOutputStream是什么?

我对InputStreamOutputStream的用例感到困惑。.

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

261
Bohemian

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

InputStream用于您阅读的许多内容。.

OutputStream用于你写的很多东西。.

这是一些示例代码。它假设已经创建了InputStream instrOutputStream osstr

int i;

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

instr.close();
osstr.close();
198
Chip Uni

快速,可靠且价格合理的云托管

注册并在30天内获得$50奖金!

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格式的Streams)。.

85
Arne Deutsch

来自 Java Tutorial

流是一系列数据。.

程序使用输入流从源读取数据,一次读取一项:

enter image description here

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

enter image description here

上图所示的数据源和数据目的地可以是保存,生成或使用数据的任何内容。显然这包括 磁盘文件 ,但源或目标也可以是 另一个程序,外围设备,网络套接字或数组 。.

示例 代码 来自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 file复制到outagain.txt通过一次写入一个字节

看看这个SE问题,了解有关高级字符流的更多详细信息,这些字符流是Byte Streams之上的包装器:

字节流和字符流

28
Ravindra babu

您从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();
9
pstanton

OutputStream是一个表示写入输出的抽象类。有许多不同的OutputStream类,它们会写出某些内容(如屏幕,文件,字节数组或网络连接等)。 InputStream类访问相同的东西,但他们从中读取数据。.

这是 一个很好的基本示例 使用FileOutputStream和FileInputStream将数据写入文件,然后将其读回。.

5
Kaleb Brasee

流是连续的液体,空气或气体流。.

Java流是来自源或目标的数据流。源或目标可以是磁盘,内存,套接字或其他程序。数据可以是字节,字符或对象。这同样适用于C#或C++流。 Java流的一个很好的比喻是水从水龙头流入浴缸,然后流入排水系统。.

数据代表流的静态部分;读取和写入方法是流的动态部分。.

InputStream表示来自源的数据流,OutputStream表示进入目标的数据流。最后,InputStreamOutputStream是对数据的低级访问的抽象,例如C文件指针。.

3
Jan Bodnar

:在非专业术语中,流是数据,大多数通用流是数据的二进制表示。.

输入流 :如果要从文件或任何其他源读取数据,则使用的流是输入流。简而言之,输入流充当读取数据的通道。.

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

2
Sher Mohammad

输出流通常与某些数据目的地(如文件或网络等)相关。在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");
    }
}
0
Deep Arora

输入流与输出流

输入流

  • 此流用于从文件中读取数据
  • 可以使用关键字new创建对象,并且有几种类型的构造函数可用

  • 以下构造函数将文件名作为字符串来创建输入流对象以读取文件

    InputStream f = new FileInputStream("input.txt");

  • 以下构造函数采用文件对象来创建输入流对象以读取文件。首先,我们使用File()方法创建一个文件对象,如下所示

    File f = new File(“input.txt");

    InputStream f = new FileInputStream(f);

输出流

  • FileOutputStream用于创建文件并将数据写入其中

  • 如果文件尚不存在,则会在打开文件以进行输出之前创建该文件

  • 这里有两个构造函数,可用于创建FileOutputStream对象

  • 以下构造函数将文件名作为字符串来创建输入流对象以写入文件

    OutputStream f = new FileOutputStream(“output.txt")

  • 下面的构造函数接受一个文件对象来创建一个输出流对象来写入该文件。首先,我们使用File()方法创建一个文件对象,如下所示

    File f = new File(“output.txt");

    OutputStream f = new FileOutputStream(f);

0
Malith Ileperuma