`

关于将网络上的图片下载保存到本地的效率对比

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

第一种方法:
public static void main(String[] args) {

		String url = "http://pic.yesky.com/imagelist/09/01/11277904_7147.jpg";
		
		Long time1 = System.currentTimeMillis();
		Long time2 = 0L;
		
		try {
			FileOutputStream fos = new   FileOutputStream( "c:\\tmp.jpg ");
			InputStream is = new URL(url).openStream();
			
			time2 = System.currentTimeMillis();
			
			int   data = is.read(); 
			while(data!=-1){ 
			        fos.write(data); 
			        data=is.read(); 
			} 
			is.close();
			fos.close();			
			
		} catch (IOException e) {
			
			e.printStackTrace();
		} 	
		
		
		Long time3 = System.currentTimeMillis();
		System.out.println("网络读取流的时间:" + (time2 - time1) + " 把输入流保存成文件的时间:"+ (time3 - time2));

	}


第二种方法:中间用buffer做缓存
public static void main(String[] args){

		String url = "http://pic.yesky.com/imagelist/09/01/11277904_7147.jpg";
				
		Long time1 = System.currentTimeMillis();
		Long time2 = 0L;		
		
		try {
			int   bytesum=0; 
			int   byteread=0;
			FileOutputStream fos = new   FileOutputStream( "c:\\tmp2.jpg ");
			InputStream is = new URL(url).openStream();
			
			time2 = System.currentTimeMillis();

			byte[]     buffer   =new     byte[4096]; 			
			while   ((byteread=is.read(buffer))!=-1) 
			  { 		     
			      bytesum+=byteread; 
//			      System.out.println(bytesum); 
			      fos.write(buffer,0,byteread); 
			  }   
			is.close();
			fos.close();			
		} catch (IOException e) {			
			e.printStackTrace();
		} 	
		
		Long time3 = System.currentTimeMillis();
		System.out.println("网络读取流的时间:" + (time2 - time1) + " 把输入流保存成文件的时间:"+ (time3 - time2));

	}


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

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

第一种方法,发现效率高过第二种方法,而且第一种方法写法简洁的多。建议用第一种方法
  其实在android里面,不建议直接把网络图片原样写人sd里面,毕竟手机的sd空间是有限的。最常用的方法是把网络图片压缩成jpg格式保存:
byte[] data = readInputStream(new URL(url).openStream());
				Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
						data.length);
				
				bitmap.compress(CompressFormat.JPEG, 100, new FileOutputStream(
						file));


readInputStream()方法的代码:(把输入流转换成比特流)
public static byte[] readInputStream(InputStream inStream) throws Exception{  
        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();  
        byte[] buffer = new byte[4096];  
        int len = 0;  
        while( (len = inStream.read(buffer)) != -1 ){  
            outSteam.write(buffer, 0, len);  
        }  
        outSteam.close();  
        inStream.close();  
        return outSteam.toByteArray();  
}
 
3
0
分享到:
评论

相关推荐

    FLASH AS 简易涂鸦板(带本地保存功能与撤消上一步功能)

    [FLASH/AS1/2]简易涂鸦板(带本地保存功能与撤消上一步功能) 作者:古树悬叶 日期:2010-01-07 二类涂鸦板:一种是主流的通过保存鼠标轨迹的方式来保存涂鸦数据,既使用矢量的方式来保存,样例如闪吧的涂鸦程序;...

    MXview_V2.9 MOXA交换机网管软件

    MXview提供整合式的管理平台,能够自动侦测安装于网络的Moxa网络设备和SNMP/IP设备,可随时随地、可视化地管理所有被选中的网络组件。 特点 支持历史网络事件回放功能 自动发现设备并可视化网络中设备的物理连接 ...

    计算机网络(谢希仁第五版)课后答案

    计算机网络(谢希仁第五版)课后答案 第一章 概述 1-01 计算机网络向用户可以提供那些服务? 答: 连通性和共享 1-02 简述分组交换的要点。 答:(1)报文分组,加首部 (2)经路由器储存转发 (3)在目的地合并 1-...

    酒店安防监控设计方案.doc

    当在线回放期间有可疑片段时,可以对单个或 多个摄像机画面某个时间的片段下载到电脑或上传有关部门,保证下载保存的录像片段 都是有用、有效的信息,节省大量录像下载的时间和提高工作效率。 4. 硬盘管理 由于采用...

    聚生网管 - 限制网速

    1.软件应该安装在什么主机上比较好,对于网络环境有什么要求? 聚生网管软件可以安装在子网内的任意主机上,如果您网络是采用ADSL宽带路由器或者路由器接入公网,那么把软件安装在接在交换机上的任意一台主机即可,...

    phpcms远程图片本地化不成功及加水印功能失效的解决教程

    近来发现有会员提问说08版本的远程保存图片效率不高且成功率低,查看了源代码,使用了copy函数,经过一番百度谷歌,基本上都建议放弃使用这个函数,因为受网络环境的影响比较大.

    SharedPreferences例子源码

    SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android123提示最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的...

    网际畅游 MyIE 3.0 源代码

    自动保存:类似于保存功能,但页面将自动保存到预先设定好的目录中而不再需要保存对话框。自动保存有4种方式可以选择:WEB页面为html, WEB页面为mht, 仅HTML,快速保存。可以在Myie选项的保存页面中选择默认的方式。...

    vc++ 开发实例源码包

    7:在IE工具栏上加按钮,可以直接拖动连接到按钮上下载. 8:注册采用激活方式. 9:采用Messenger的弹出滑动消息提示框. 10:下载管理,虚拟文件夹. 11:自动ping. 12:连接到搜索引擎. 13:自动报告bug,建议等. 14:宏功能. 15...

    毕设新项目-基于C++开发的校医院远程诊断系统源码+项目使用说明.zip

    读入图片:使用QFile类将图片读入,保存为QByteArray字节数组,然后将照片数据封装成QVariant变量,在字符串语句中以问号代替数据,然后使用prepare和addBindValue函数,最后执行插入语句exec 使用...

    浅谈关于能量管理系统

    该系统还可以将EM S 的实时运行状态, 中间计算信息及计算结果在Internet 网络上发布, 实现系统的无人值守及远程监控和故障诊断, 具有实用价值。该系统的研制成功为EM S 的实用化打下了坚实的基础, 充分发挥EM S 在...

    ssh(structs,spring,hibernate)框架中的上传下载

     本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。  总体实现  上传文件保存到T_FILE表中,T_FILE表结构...

    CuteFTP9简易汉化版

    一种上传软件将选中的文件和文件夹上传到远程FTP服务器上的一个归档文件,并将恢复您的数据档案,如果你的电脑出现故障。 远程Backup-CuteFTP允许您创建的远程副本文件和文件夹在您的本地计算机上定期或在预定的时间。...

    多媒体教室

    1、打开控制面板的网络设置项,将 TCP/IP 协议添加到网络组件中(如下图),再选择与网卡绑定的 TCP/IP 协议。 2、在 TCP/IP 属性页中设置正确的 IP 地址,注意不要使 IP 地址重复,设置完成后重新启动计算机。 注:...

    vfp6.0系统免费下载

    Microsoft Visual FoxPro web 站点上有一份优秀的策略背景论文,它比较了 Visual FoxPro、Visual Basic、SQL Server 和 Access 等 Microsoft 产品之间的不同。 问题 1-7: 哪里可以找到 Visual FoxPro 的使用示例? ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例113 深克隆效率的比较 141 实例114 transient关键字的应用 143 5.7 接口和内部类 145 实例115 使用sort()方法排序 145 实例116 简化compareTo()方法的重写 146 实例117 策略模式的简单应用 148 实例118 适配器...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...

    3389批量远程桌面连接器 v3.0

    适合服务器管理员,网站站长使用批量登陆远程windows服务器,如果您手上的服务器比较多,服务器经常需要查看是否正常运行,这个可以监测服务器状态。可以保存登陆账号密码,远程登陆。3389批量远程桌面连接器V3.0,...

Global site tag (gtag.js) - Google Analytics