`
zengyan2012
  • 浏览: 410512 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android 网络下载图片 效率对比

阅读更多

Android里面将图片保存到本地,到网络上搜索了一下,方法都差不多,大同小异,把输入流转换成输出流的过程而已。最近工作闲,特把其中的两个方法对比一下,看他们的效率如何(找javaSE里面测试的): 

第一种方法: 

Java代码   收藏代码
  1. public static void main(String[] args) {  
  2.   
  3.         String url = "http://pic.yesky.com/imagelist/09/01/11277904_7147.jpg";  
  4.           
  5.         Long time1 = System.currentTimeMillis();  
  6.         Long time2 = 0L;  
  7.           
  8.         try {  
  9.             FileOutputStream fos = new   FileOutputStream( "c:\\tmp.jpg ");  
  10.             InputStream is = new URL(url).openStream();  
  11.               
  12.             time2 = System.currentTimeMillis();  
  13.               
  14.             int   data = is.read();   
  15.             while(data!=-1){   
  16.                     fos.write(data);   
  17.                     data=is.read();   
  18.             }   
  19.             is.close();  
  20.             fos.close();              
  21.               
  22.         } catch (IOException e) {  
  23.               
  24.             e.printStackTrace();  
  25.         }     
  26.           
  27.           
  28.         Long time3 = System.currentTimeMillis();  
  29.         System.out.println("网络读取流的时间:" + (time2 - time1) + " 把输入流保存成文件的时间:"+ (time3 - time2));  
  30.   
  31.     }  



第二种方法:中间用buffer做缓存

Java代码   收藏代码
  1. public static void main(String[] args){  
  2.   
  3.         String url = "http://pic.yesky.com/imagelist/09/01/11277904_7147.jpg";  
  4.                   
  5.         Long time1 = System.currentTimeMillis();  
  6.         Long time2 = 0L;          
  7.           
  8.         try {  
  9.             int   bytesum=0;   
  10.             int   byteread=0;  
  11.             FileOutputStream fos = new   FileOutputStream( "c:\\tmp2.jpg ");  
  12.             InputStream is = new URL(url).openStream();  
  13.               
  14.             time2 = System.currentTimeMillis();  
  15.   
  16.             byte[]     buffer   =new     byte[4096];              
  17.             while   ((byteread=is.read(buffer))!=-1)   
  18.               {                
  19.                   bytesum+=byteread;   
  20. //                System.out.println(bytesum);   
  21.                   fos.write(buffer,0,byteread);   
  22.               }     
  23.             is.close();  
  24.             fos.close();              
  25.         } catch (IOException e) {             
  26.             e.printStackTrace();  
  27.         }     
  28.           
  29.         Long time3 = System.currentTimeMillis();  
  30.         System.out.println("网络读取流的时间:" + (time2 - time1) + " 把输入流保存成文件的时间:"+ (time3 - time2));  
  31.   
  32.     }  



每个方法测试了三次,结果如下: 
第一种方法: 
网络读取流的时间:453 把输入流保存成文件的时间:766 
网络读取流的时间:344 把输入流保存成文件的时间:344 
网络读取流的时间:297 把输入流保存成文件的时间:281 

第二种方法: 
网络读取流的时间:312 把输入流保存成文件的时间:282 
网络读取流的时间:3484 把输入流保存成文件的时间:906 
网络读取流的时间:828 把输入流保存成文件的时间:1250 

第一种方法,发现效率高过第二种方法,而且第一种方法写法简洁的多。建议用第一种方法。 
  其实在android里面,不建议直接把网络图片原样写人sd里面,毕竟手机的sd空间是有限的。最常用的方法是把网络图片压缩成jpg格式保存:

Java代码   收藏代码
  1. byte[] data = readInputStream(new URL(url).openStream());  
  2.                 Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,  
  3.                         data.length);  
  4.                   
  5.                 bitmap.compress(CompressFormat.JPEG, 100new FileOutputStream(  
  6.                         file));  



readInputStream()方法的代码:(把输入流转换成比特流)

Java代码   收藏代码
  1. public static byte[] readInputStream(InputStream inStream) throws Exception{    
  2.         ByteArrayOutputStream outSteam = new ByteArrayOutputStream();    
  3.         byte[] buffer = new byte[4096];    
  4.         int len = 0;    
  5.         while( (len = inStream.read(buffer)) != -1 ){    
  6.             outSteam.write(buffer, 0, len);    
  7.         }    
  8.         outSteam.close();    
  9.         inStream.close();    
  10.         return outSteam.toByteArray();    
  11. }  

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics