当前位置:编程学习 > JAVA >>

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中的内容会放到内在中 --------------------编程问答-------------------- // 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用  
        outStream.write(buffer, 0, len);   --------------------编程问答-------------------- 因为inputStream里面的内容你不知道具体有多长,所以无法确定到底buffer需要多长1024也许未必够用,所以只能把buffer当做缓存,每次读进一部分,在把buffer的内容,写到足够大的内存区。如果你确定你的输入流中字节数小于1024,你也可以直接返回buffer --------------------编程问答--------------------
引用 2 楼 chuyoule 的回复:
因为inputStream里面的内容你不知道具体有多长,所以无法确定到底buffer需要多长1024也许未必够用,所以只能把buffer当做缓存,每次读进一部分,在把buffer的内容,写到足够大的内存区。如果你确定你的输入流中字节数小于1024,你也可以直接返回buffer

正解,另外 byteArrayOutputStream关闭是无效的,JDK如是说,不过话说回来没效干嘛还要提供则个方法...
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,