为什么Inputstream读取方法返回int?

时间:2014-02-27 15:17:23

标签: java buffer bytearray inputstream

我正试图通过输入流中的read方法了解幕后发生的事情。

我知道我可以做到以下几点:

InputStream is = new FileInputStream(new File("myFile.txt"));

byte[] buffer = new byte[8192];

while(is.read(buffer) != -1) {
   // do something with the bytes
}

我相信这可以通过将最多8192个字节读入我的字节数组,然后对这些字节执行某些操作。但为什么读取返回读取的字节数的整数?这纯粹是这样,无论使用字节数组中的字节知道何时停止查找字节?

我想我很困惑,因为,例如,我的一个读物显示

buffer[0] = 70
buffer[1] = 105
buffer[2] = 108
etc...

但如果我为整个字节数组读取高达8192,为什么数组设置中的元素会这样?

我意识到这可能是一个愚蠢的问题,但我很感激任何理解这一点的帮助。

2 个答案:

答案 0 :(得分:1)

is.read(buffer)方法读取最大可用字节数,或buffer.length(在本例中为8192)字节,以先到者为准。

如果没有填充整个数组(这是可能的,因为可用字节数可能小于buffer.length),那么所需的字节数可能是有用的 read,以便可以安全地迭代数组,而不会抛出NullPointerException

你看到的原因

buffer[0] = 70
buffer[1] = 105
buffer[2] = 108
etc...

因为在读取的字节流中,第一个值是70,第二个值是105,第三个值是108,依此类推。这些实际上是流的内容,一次一个字节。

答案 1 :(得分:0)

因为无论出于何种原因,它可能无法立即读取所有字节。因此,java VM返回它成功读取的数字,以便您知道发生了什么。