有人能解释一下什么是输入流和输出流吗?

我对InputStream和OutputStream的用例感到困惑。

如果你能在解释的同时附上一段代码,那就太好了。谢谢!


当前回答

对于一种InputStream,您可以将其视为数据源的“表示”,就像文件一样。 例如:

FileInputStream fileInputStream = new FileInputStream("/path/to/file/abc.txt");

fileInputStream表示该路径中的数据,您可以使用read方法从文件中读取字节。

对于另一种类型的InputStream,它们接收另一种InputStream并进行进一步的处理,如解压。 例如:

GZIPInputStream gzipInputStream = new GZIPInputStream(fileInputStream);

gzipInputStream将fileInputStream视为压缩的数据源。当您使用read(buffer, 0, buffer.length)方法时,它将把gzip文件的一部分解压缩到您提供的缓冲区中。

我们使用InputStream的原因是,随着源文件中的数据越来越大,比如源文件中有500GB的数据,我们不想把所有东西都存储在内存中(昂贵的机器;对GC分配不友好),并且我们希望更快地获得一些结果(读取整个文件可能需要很长时间)。

对于OutputStream也是一样。我们可以开始移动一些结果到目的地,而不需要等待整个事情完成,加上更少的内存消耗。

如果你想要更多的解释和例子,你可以检查这些摘要:InputStream, OutputStream,如何使用InputStream,如何使用OutputStream

其他回答

流:在外行术语中,流是数据,大多数通用流是数据的二进制表示。

输入流:如果您从文件或任何其他源读取数据,则使用的流是输入流。简单地说,输入流充当读取数据的通道。

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

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

InputStream用于读取的许多内容。

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

下面是一些示例代码。它假设InputStream instr和OutputStream osstr已经创建:

int i;

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

instr.close();
osstr.close();

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

对于一种InputStream,您可以将其视为数据源的“表示”,就像文件一样。 例如:

FileInputStream fileInputStream = new FileInputStream("/path/to/file/abc.txt");

fileInputStream表示该路径中的数据,您可以使用read方法从文件中读取字节。

对于另一种类型的InputStream,它们接收另一种InputStream并进行进一步的处理,如解压。 例如:

GZIPInputStream gzipInputStream = new GZIPInputStream(fileInputStream);

gzipInputStream将fileInputStream视为压缩的数据源。当您使用read(buffer, 0, buffer.length)方法时,它将把gzip文件的一部分解压缩到您提供的缓冲区中。

我们使用InputStream的原因是,随着源文件中的数据越来越大,比如源文件中有500GB的数据,我们不想把所有东西都存储在内存中(昂贵的机器;对GC分配不友好),并且我们希望更快地获得一些结果(读取整个文件可能需要很长时间)。

对于OutputStream也是一样。我们可以开始移动一些结果到目的地,而不需要等待整个事情完成,加上更少的内存消耗。

如果你想要更多的解释和例子,你可以检查这些摘要:InputStream, OutputStream,如何使用InputStream,如何使用OutputStream

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

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