`

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

阅读更多
   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
分享到:
评论

相关推荐

    wordpress远程图片本地化插件

    在WordPress博客平台上,远程图片本地化是一个重要的优化策略,它涉及到如何将外部链接的图片下载并存储到自己的服务器上,从而提高网站加载速度,降低对外部资源的依赖,并且有利于SEO(搜索引擎优化)。...

    网络文件下载和网络测速

    网络文件下载是指通过互联网从远程服务器获取数据并将其保存到本地设备上的过程。这个过程涉及到多种技术,包括HTTP、FTP、BT(BitTorrent)等。HTTP是最常见的下载协议,它支持网页上的文件下载;FTP则主要用于...

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

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

    避免图片重复保存在相册中 ALAssets

    在iOS开发中,管理和操作用户的照片库是常见的需求,尤其是涉及到网络图片的下载与保存。`ALAssets`是苹果在早期iOS SDK中提供的一个框架,用于访问和管理用户的媒体资源,包括照片和视频。然而,随着iOS的发展,`...

    将服务器文件下载到本地工具

    标题 "将服务器文件下载到本地工具" 暗示了我们正在讨论的是一个用于在本地计算机和远程服务器之间传输文件的软件。这类工具通常被称为FTP(文件传输协议)客户端,或者在本例中,是WinSCP。WinSCP是一款流行的开源...

    图片下载.rar

    批量下载意味着用户可以一次性选择多个图片链接,软件会自动处理这些请求,将图片逐一下载到本地。这对于需要大量图片资源的用户,比如电商平台的店铺装修、商品对比分析或者市场研究等工作,提供了极大的便利。 ...

    WPF将用户名和密码加密保存在文件当中

    本教程将详细解释如何在WPF客户端实现这个功能,涉及到的主要知识点包括: 1. **加密算法选择**:在WPF应用中,常用的加密算法有AES(高级加密标准)、RSA(公钥加密算法)和SHA(安全散列算法)等。AES是块加密,...

    使用python爬虫实现网页视频自动下载并保存.docx

    该方案旨在解决视频下载的痛点问题,例如网站自带的保存按钮访问路径比较长、命名问题、代理访问慢等问题。 首先,我们需要将目标视频的详情页直接保存为本地 HTML 文件,然后使用 Python 批量处理这些本地 HTML ...

    IDHTTP断点下载,类似迅雷断点下载

    这种功能极大地提高了用户下载大文件时的便利性和效率,尤其在不稳定网络环境中非常实用。IDHTTP组件是Delphi和C++Builder等开发环境中的一个标准组件,它允许开发者实现HTTP协议的客户端功能,包括文件的下载。在...

    简单下载器源码

    3. **文件下载与流处理**:当请求返回时,下载器需要将响应体的二进制数据保存到本地文件系统。这通常涉及到文件操作,如打开、写入和关闭文件,以及流处理,确保数据正确无损地写入。 4. **进度显示**:为了提升...

    FTP 文件同步 C#

    FTP文件同步的核心在于通过FTP协议连接到远程服务器,读取服务器上的文件列表,比较本地文件与服务器文件的差异,然后进行上传或下载操作以保持文件的一致性。以下是一些关键知识点: 1. **FTP连接**:使用C#的`...

    百度mp3下载器

    这款下载器对于喜欢在线音乐的用户来说,提供了一种便捷的方式,能够帮助他们将喜欢的音乐保存到本地。然而,由于其目前采用的是单线程下载,下载速度可能受到限制,对于大文件或者网络环境不理想的用户来说,可能...

    网络嗅探器5.5

    一旦识别出来,这些文件会被保存到本地,便于后续分析或回放。 除了基本的数据捕获,"网络嗅探器5.5"还可能具备高级分析功能,如协议解码、流量统计、异常检测等。协议解码允许用户查看每个数据包的详细结构,包括...

    php带密码功能并下载远程文件保存本地指定目录 修改加强版

    标题中的“php带密码功能并下载远程文件保存本地指定目录 修改加强版”指的是一个PHP脚本,该脚本允许用户通过输入密码下载远程文件,并将其保存到本地服务器上的指定目录。这个修改加强版相较于原版可能增加了错误...

    用java写的下载器程序

    这个"用java写的下载器程序"很可能是一个基于Java实现的简单或高级的文件下载工具,它能够从互联网上抓取文件并保存到用户的本地系统。 在Java中构建下载器程序,通常涉及到以下几个关键知识点: 1. **网络编程**...

    SmokeDown,C#写下载工具

    同时,为确保文件的完整性和一致性,下载完成后应对比本地文件的MD5与服务器端的MD5,若不一致则提示用户重新下载。 总的来说, SmokeDown这款由C#编写的下载工具,通过扩展WebClient类并实现断点续传功能,不仅...

    shell脚本比较两台服务器目录及文件是否一致

    在IT运维工作中,经常需要对比不同服务器上的文件或目录是否一致,特别是在对生产环境和测试环境进行对比时尤为重要。本文将详细解析一个用于比较两台服务器目录及文件是否一致的Shell脚本,并探讨其工作原理、应用...

    bluebox(cisco配置保存)

    bluebox工具就是这样一个实用的助手,它可以自动或手动执行备份任务,将Cisco路由器和交换机的配置文件保存到本地或者云端,确保配置的安全性和可访问性。这样,当网络出现异常,或者需要对比不同时间点的配置时,...

    网站关键字监控,自动保存记录,实时提醒

    网站关键字监控是网络运营与SEO优化中的重要环节,它涉及到对特定关键词在搜索引擎中的排名、搜索量以及相关网页的变化情况的持续跟踪。自动保存记录和实时提醒功能则为这一过程提供了高效和便捷的支持,帮助网站...

Global site tag (gtag.js) - Google Analytics