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如是说,不过话说回来没效干嘛还要提供则个方法...
|