java的读取流问题,请教

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

    /**
     * 从输入流中获取字节数组
     * @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();
    }
阅读 2.6k
4 个回答

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

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

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

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

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

读完了就返回-1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题