HazzaCheng 2016-07-17 13:52 采纳率: 0%
浏览 1835
已采纳

关于ByteArrayOutputStream.read(byte[])的问题

 public static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inStream.read(buffer)) != -1){
            outStream.write(buffer,0,len);
        }
        inStream.close();
        return outStream.toByteArray();

    }

这一段没有看懂,为什么要循环呢,难道不是一次全部读完吗,我看API也没看懂,求解释

 while ((len = inStream.read(buffer)) != -1){
            outStream.write(buffer,0,len);
        }
  • 写回答

2条回答 默认 最新

  • Littlechoc 2016-07-17 14:55
    关注

    buffer是1024字节,即1KB,的缓冲区,inStream.read(buffer)就是从输入流中读取一定量(<=1024字节)的数据到缓冲区buffer中,返回值len就是
    读取到数据的长度,当len == -1时表示没有更多的数据可以读了。所以,这个循环的意思就是,从inStream中每次读取不大于1024个字节的数据
    buffer中,再将buffeer中的值写入到输出流outStream中,直到输入流没有更多数据,即返回-1的时候停止。
    API见:https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte[])

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?