0

好的,我知道缓冲区实际上是一个字节数组,但是我从未见过以下声明(取自此处

URLConnection con = new URL("http://maps...").openConnection();
InputStream is = con.getInputStream();
byte bytes[] = new byte[con.getContentLength()];
is.read(bytes);

这是避免使用 BufferInputStream 对象的正确方法吗?这里我们有一个从字节 [] 读取的无缓冲流?不应该反过来吗?提前致谢。

4

2 回答 2

3

不,这不是正确的方法。方法read()最多读取 N 个字节,其中 N 是数组的长度。如果没有更多字节可用,它可以读取更少的字节(甚至 0)。方法返回已读取的字节数read()。当到达流的末尾时,该方法返回-1

因此正确的方法是循环读取字节:

byte[] buf = new buf[MAX];
int n = 0;
while ((n = stream.read(buf)) >= 0) {
    // deal with n first bytes from buf
}
于 2013-05-09T19:20:05.517 回答
0

或使用 Apache commons-io

输入流是;byte[] bytes = IOUtils.toByteArray(is);

于 2013-05-09T20:22:44.573 回答