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

时间:2013-12-25 20:06:18

标签: java android

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

InputStream与“文件的字节表示”不同。你实际上可以从流中获得,但很可能你不想这样做。

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

您可能感兴趣的是内存映射。内存映射允许您将文件的一部分(或整个文件)直接映射到内存中,这样您就可以直接使用is。

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