【发布时间】:2013-08-12 19:14:07
【问题描述】:
下面这段代码用于读取Files
int bytesRead;
byte[] bytes = new byte[1000]; //buffer
FileInputStream fis = new FileInputStream(uploadedFile);
while ((bytesRead = fis.read(bytes)) != -1) {
fis.read(bytes, 0, bytesRead);
}
fis.close();
从此输入流中读取最多 b.length 个字节的数据到一个字节数组中。此方法会阻塞,直到某些输入可用。
没有指定它重新填充bytes数组的位置,但是填充array的流直到file成功read.。
但是它在内部是如何维持这个魔法的呢?
我看到源代码或阅读方法
public int More ...read(byte b[]) throws IOException {
214 return readBytes(b, 0, b.length);
215 }
而readBytes的源代码是
200 private native int More ...readBytes
(byte b[], int off, int len) throws IOException;
有注意提到bytes..
我上传了一个 500MB 的文件,没有任何问题,分配 1000 字节 array。
【问题讨论】:
-
字节数组被重新填充的唯一原因是你在一个while循环中进行读取调用,直到整个文件被读取后才会中断。
-
从此输入流中读取最多 b.length 个字节的数据到一个字节数组中 这意味着它会填充给定的
byte[]。 -
@SotiriosDelimanolis 是的,它显示,它应该重新填充后对吗?纠正我如果我错了..新的流。
-
您可能想阅读此question。 问题。
-
每次
while循环,您的byte[]将包含流中的下一个字节。