`
zengyan2012
  • 浏览: 416009 次
  • 性别: 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. }  

 

 

分享到:
评论

相关推荐

    android图片处理集合demo

    Android原生的Bitmap API在处理大量或大尺寸图片时效率较低,可能导致内存溢出。因此,通常会使用第三方图片加载库,如Glide、Picasso、Fresco等。这些库提供了缓存、内存管理以及网络加载等功能,优化了图片显示的...

    Android-强大的图片操作库

    在Android开发中,图片操作是不可或缺的一部分,无论是加载网络图片,还是进行图片处理,都需要借助特定的库来实现。本文将深入探讨一个强大的Android图片操作库,并基于提供的压缩包文件"Liberuman-ImageSet-d...

    Android图片处理

    在Android平台上,图片处理是一项重要的任务,特别是在开发各种应用程序,如社交网络、图像编辑器或者游戏时。Android提供了丰富的API和工具,使开发者能够实现类似于Adobe Photoshop(简称PS)的效果。下面将详细...

    android 图片保存测试对比

    在Android平台上进行图片处理时,保存格式的选择是一个重要的考虑因素,尤其是当涉及到图像质量和存储效率时。本测试对比主要关注了两种最常见的图片格式:JPEG(jpg)和PNG。以下是这两种格式的特点、优缺点以及在...

    Android-遮罩对比图效果组件

    2. **图片加载**:BifacialView可能需要支持从资源文件、网络或本地存储加载图片。开发者可能使用了诸如Glide或Picasso这样的图片加载库来简化这一过程。 3. **遮罩设置**:遮罩的透明度可以通过属性或者方法进行...

    安卓图片选择框架

    xUtils是一个全面的安卓开发工具库,包含了网络请求、数据库操作、图片加载等多种功能。它简化了常见的开发任务,提高了开发效率。在这个图片选择框架中,xUtils可能被用来处理图片的加载和显示,以及与服务器的交互...

    Android-FuzzyDetection图片择优选择最清楚的图片)没有使用第三方库

    在Android开发中,图片加载与展示是至关重要的一个环节,特别是在处理用户拍摄的照片或从网络获取的图片时。"Android-FuzzyDetection图片择优选择最清楚的图片)"项目旨在提供一种解决方案,帮助开发者在没有依赖任何...

    Android 各大网络请求库的比较及实战

    本文将深入探讨四大主流的Android网络请求库:Volley、Retrofit、OkHttp,并进行实战对比,帮助开发者选择最适合自己的网络请求解决方案。 **Volley** Volley是由Google官方推出的网络请求库,它主要设计目标是...

    android各种工具类

    本文将深入探讨“android各种工具类”这一主题,包括文件操作、日期处理、图片处理、系统服务利用、网络通信以及数据库管理等核心知识点。 1. 文件操作: 在Android中,文件操作是非常基础且重要的功能。开发者需要...

    Android-android工具类大全

    "AndroidUtilCode"是一个全面的Android工具类库,包含了多种实用功能,极大地提升了开发效率。这个库的核心目标是帮助开发者在处理常见任务时减少重复代码,提高代码质量。 AndroidUtilCode库涵盖了许多关键领域的...

    Android 4.0 网络编程详解代码(共7个项目)

    3. **第3章:Android网络下的XML解析和生成** - 使用XMLPullParser进行低级别、高效的XML解析。 - DOM和SAX解析器的比较与使用。 - 使用Gson或Jackson库将XML数据转换为Java对象。 - XML的生成,如使用...

    Android Http客户端源码.rar

    Volley通过内存缓存和请求队列管理,优化了图片加载和其他网络资源的获取。适合进行频繁且小量的数据交换,但处理大文件或复杂网络流可能不太合适。 5. **Retrofit**: Retrofit是另一个由Square公司开发的库,它...

    Android可用的14个jar包

    8. **Picasso**:这是一个图片加载库,简化了图片的下载和显示,支持缓存和图片处理。 9. **Gson**:Google的另一个JSON库,用于在Java对象和JSON数据之间进行映射,常用于网络数据的序列化和反序列化。 10. **...

    android框架afinal

    它旨在简化Android应用程序中的数据库操作、网络请求以及文件处理等常见任务,使得开发者可以更加专注于业务逻辑的实现,而非底层技术细节。 一、AFinal的核心特性 1. **数据库操作**:AFinal集成了一种基于注解的...

    Android开发图片验证码的实现

    在Android应用开发中,图片验证码(CAPTCHA)是一种常见的安全机制,用于防止自动化脚本或机器人进行恶意操作,如注册、登录等。本教程将详细讲解如何在Android项目中实现图片验证码的功能。 首先,理解图片验证码...

    安卓Android源码——自己在用的网络图片加载代码.zip

    本压缩包“安卓Android源码——自己在用的网络图片加载代码.zip”提供了一个名为“AyncImageLoader-master”的项目,这是一份用于实现异步图片加载的源码示例,下面将对其中的关键知识点进行详细的解析。 1. 异步...

    Android应用源码之afinal框架实现图片的简单异步缓存加载.zip

    Afinal是一个轻量级的Android ORM框架,同时也提供了方便的网络请求和图片加载功能。在这个源码示例中,我们将深入探讨如何使用Afinal实现图片的简单异步缓存加载。 首先,我们需要了解Afinal的基本概念。Afinal由...

    Android-Android辅助类工具集合

    1. **日期时间处理**:在Android应用中,处理日期和时间是常见的需求,如格式化、比较或计算时间差。工具类可能包含`DateUtil`,提供静态方法来方便地进行日期时间的转换和操作。 2. **字符串操作**:`StringUtil`...

    Android-AndroidUtilsAndroid开发不得不收藏的Utils

    在Android开发过程中,工具类(Utils)扮演着至关重要的角色,它们是一系列预先编写好的、通用的函数集合,可以极大地提高开发效率并减少代码重复。"AndroidUtils"就是这样一个专门为Android开发者设计的实用工具库...

    android orm框架比对分析及功能完整示例

    XUtils是一个综合性的工具库,包括网络请求、图片加载、数据库操作等功能。虽然XutilsDao的数据库操作较为方便,但由于整个库的功能繁多,可能会增加应用的体积。 为了更直观地对比这些框架,我们进行了性能测试。...

Global site tag (gtag.js) - Google Analytics