【发布时间】:2014-03-31 03:06:08
【问题描述】:
我试图通过输入流中的读取方法了解幕后发生的事情。
我知道我可以做到以下几点:
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,为什么数组设置中的元素是这样的?
我意识到这可能是一个愚蠢的问题,但如果能帮助我理解这一点,我将不胜感激。
【问题讨论】:
-
@SotiriosDelimanolis 该线程非常有帮助,谢谢!但我想我正在寻找有关返回值实际发生的情况的更多详细信息。
-
没关系,我误会了。
-
所以对于
buffer[0],它有70字节被读取。为什么buffer[0]中只有 70 个?为什么它不能达到读取的极限?是什么导致它将70放在第一个元素中?抱歉所有问题。 -
不,
buffer[0]将包含在该调用中读取的第一个字节,结果是70。如果这是读取的唯一字节,则该方法将返回1。 -
这与数据结构无关。硬盘驱动器上文件的内容以字节形式存储。当您想读取该文件的内容时,您需要逐字节读取它。这就是您的
read(byte[])调用所做的。它逐字节读取,将每个单独的字节设置到数组中的一个位置。然后该方法返回读取的字节数。
标签: java buffer bytearray inputstream