为什么我们必须将InputStream转换为ByteArrayOutputStream



为什么openInputStream函数不返回文件的字节表示形式,而是返回我们必须迭代并将其放入ByteArrayOutputStream InputStream

类 InputStream 是一个抽象类,你不能有它的实例。大多数这样的方法声明返回 InputStream,但实际上返回它的一些实际/具体实现。然后,您通常可以构造一个更高级别的流(取决于您的需求),该流在其构造函数中接受 InputStream 作为参数。现在,您需要 ByteArrayOutputStream,但其他人可能需要其他东西,例如 FileInputStream。当该方法返回输入流时,它对你们俩都很有用。

InputStream与"文件的字节表示"是不同的概念。您实际上可以从流中获取它,但很可能您不想这样做。

流是字节队列的抽象概念,对很多事情都有效,而不仅仅是文件。通过从InputStream读取,您实际上是在读取文件的字节内容,但一个接一个地读取,以避免在读取大文件时浪费内存。

不过,您可能感兴趣的是内存映射。内存映射允许您将文件的一部分(或整个文件)直接映射到内存中,因此您可以直接使用 IS。

在此处阅读有关 Java 内存映射的更多信息:http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html

最新更新