当前位置: 代码迷 >> J2SE >> InputStream中read(b)和bytearrayoutputstream的区别,该怎么解决
  详细解决方案

InputStream中read(b)和bytearrayoutputstream的区别,该怎么解决

热度:72   发布时间:2016-04-23 21:07:04.0
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
------解决方案--------------------
引用:
因为inputStream里面的内容你不知道具体有多长,所以无法确定到底buffer需要多长1024也许未必够用,所以只能把buffer当做缓存,每次读进一部分,在把buffer的内容,写到足够大的内存区。如果你确定你的输入流中字节数小于1024,你也可以直接返回buffer

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