java的读取流问题,请教

flash866
  • 24

下面是一段可以正常执行的代码,里面有个问题我不太明白,见里面的注释

    /**
     * 从输入流中获取字节数组
     * @param inputStream
     * @return
     * @throws IOException
     */
    private static  byte[] _readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) { //!问题就在这里,这个是每次读取1024字节吗?那如果被读取的流最后根本就没有1024字节,那这里不是读取失败了吗?那岂不是读取的文件都会缺少一部分?
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }
回复
阅读 1.4k
4 个回答
mizhoux
  • 3k
✓ 已被采纳

read(byte[] buffer) 的返回值就是本次读取到的字节数,这个值最大的时候就是数组 buffer 的长度;如果已经读到流的末尾,就返回 -1。

顺便说一下,我喜欢这样写:

for (int len; (len = inputStream.read(buffer)) != -1; ) {
    ...
}

碰到结束符,就读取结束了,这个时候len 不等于1024

假如最后没有1024,那么len就等于剩余的。

读完了就返回-1

宣传栏