Java的InputStream操作的坑

原创
2019/07/23 11:36
阅读数 510

1、in.available()该方法不能保证所有的流已到达

//这种写法在网络请求数据时会导致接收数据不完整 
byte[] input = new byte[in.available()];
 in.read(input);

2、二进制流读取错误方式

 byte[] buffer = new byte[1024];
  BufferedInputStream bis = new BufferedInputStream(in);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while(bis.read(buffer) != -1){ //这个写法会导致buffer数组没有清空,数据会比原数据流多
         bos.write(buffer);
    }
 byte[] input = bos.toByteArray();

3、正确的读取方式

            int n;
            byte[] buffer = new byte[1024];
            BufferedInputStream bis = new BufferedInputStream(in);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            while((n=bis.read(buffer)) != -1){
                bos.write(buffer,0,n);//每次保证只写入读到的流位置
            }
            byte[] input = bos.toByteArray();

4、快速读取网络流

//使用现成工具读取 
URL imgUrl = new URL(path);          
 byte[] input = IOUtils.toByteArray(imgUrl); 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部