Java的InputStream操做的坑

一、in.available()該方法不能保證全部的流已到達java

//這種寫法在網絡請求數據時會致使接收數據不完整 
byte[] input = new byte[in.available()];
 in.read(input);

二、二進制流讀取錯誤方式數組

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();

三、正確的讀取方式網絡

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();

四、快速讀取網絡流工具

//使用現成工具讀取 
URL imgUrl = new URL(path);          
 byte[] input = IOUtils.toByteArray(imgUrl);
相關文章
相關標籤/搜索