为什么openInputStream
函数不返回文件的字节表示而不是返回InputStream
,我们必须迭代并将其放入ByteArrayOutputStream
?
答案 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