您现在的位置: 爱51代码网 >> 范文 >> 文章正文
InputStream中read(b)和bytearrayoutputstream的区别

public byte[] readInStream(InputStream inputStream) throws Exception
    {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        // 声明缓冲区
        byte[] buffer = new byte[1024];
        // 定义读取默认长度
        int length = -1;
        while ((length = inputStream.read(buffer)) != -1)
        {
            // 把缓冲区中输出到内存中
            byteArrayOutputStream.write(buffer, 0, length);
        }
        // 关闭输出流
        byteArrayOutputStream.close();
        // 关闭输入流
        inputStream.close();
        // 返回这个输出流的字节数组
        return byteArrayOutputStream.toByteArray();
    }
 上面方法中 while ((length = inputStream.read(buffer)) != -1)已经读到字节数组中了,为什么下面还要放到byteArrayOutputStream.write(buffer, 0, length);这里面,byteArrayOutputStream它本身也是放到自身的字节数组中,我完全可以直接返回buffer,没有必要传到byteArrayOutputStream的字节数组中然后再toByteArray()。难道是因为byteArrayOutputStream中的内容会放到内在中

因为inputStream里面的内容你不知道具体有多长,所以无法确定到底buffer需要多长1024也许未必够用,所以只能把buffer当做缓存,每次读进一部分,在把buffer的内容,写到足够大的内存区。如果你确定你的输入流中字节数小于1024,你也可以直接返回buffer

另外 byteArrayOutputStream关闭是无效的,JDK如是说,不过话说回来没效干嘛还要提供则个方法...  

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    TClientDataSet如何避免多人更新
    如何用delphi代码修改XML节点
    vc++ pvoid *用delphi怎么表达
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    在lotus BS系统里怎样方便实现统
    undefined reference timer_crea
    eclipse的错找不到或无法加载
    Jdbc跟Hibernate操作数据库的
    myeclipse10安装JBPM插件app
    Memcache的key如何管理
    eclipse中看不到jdk的源码
    系统之间的调用是选择rpc还是
    IM系统Java工程的测试连接JV
    JAVA如何获取保存下载对话框
    Struts2 Action 中调用webse
    java.lang.ClassNotFoundExc
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |