一、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);