好的我知道缓冲区实际上是一个字节数组,但我从未见过以下声明(取自here)
URLConnection con = new URL("http://maps...").openConnection();
InputStream is = con.getInputStream();
byte bytes[] = new byte[con.getContentLength()];
is.read(bytes);
避免使用BufferInputStream对象是否是正确的方法?这里我们有一个从byte []读取的无缓冲流?不应该是相反的方式? 提前谢谢。
答案 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);