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