Java 为什么Inpustream读取方法返回int?

Java 为什么Inpustream读取方法返回int?,java,buffer,bytearray,inputstream,Java,Buffer,Bytearray,Inputstream,我正试图理解从inputstream读取方法在幕后发生了什么 我知道我可以做到以下几点: InputStream is = new FileInputStream(new File("myFile.txt")); byte[] buffer = new byte[8192]; while(is.read(buffer) != -1) { // do something with the bytes } 我相信这是通过在我的字节数组中读取多达8192个字节来实现的,然后对这些字节进行处

我正试图理解从inputstream读取方法在幕后发生了什么

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

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,那么为什么数组中的元素是这样设置的呢


我意识到这可能是一个愚蠢的问题,但我非常感谢您能帮助我理解这一点。

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

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

如果整个数组未被填充(这是可能的,因为可用字节数可能小于
buffer.length
),那么读取字节数可能很有用,这样可以安全地迭代数组,而不会引发
NullPointerException

你看到的原因是什么

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

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

@SotiriosDelimanolis该线程非常有用,谢谢!但是我想我正在寻找更多关于返回值实际发生了什么的细节。不过,我误解了。例如,对于
buffer[0]
,它有
70
字节被读取。为什么只有70个缓冲区[0]?为什么它不能达到读数的极限?是什么导致它在第一个元素中放置
70
?很抱歉提出所有问题。不,
buffer[0]
将包含在该调用中读取的第一个字节,结果是
70
。如果这是唯一读取的字节,那么该方法将返回
1
。这与数据结构无关。硬盘上的文件内容存储为字节。当您想要读取该文件的内容时,需要逐字节读取它。这就是您的
读取(字节[])
调用所做的。它逐字节读取,将每个字节设置为数组中的一个位置。然后,该方法返回读取的字节数。