Byte []用作BufferInputStream ok但是

时间:2013-05-09 19:14:06

标签: java io nio

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

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

避免使用BufferInputStream对象是否是正确的方法?这里我们有一个从byte []读取的无缓冲流?不应该是相反的方式? 提前谢谢。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

或使用Apache commons-io

InputStream是; byte [] bytes = IOUtils.toByteArray(is);