关于下载的五种方式

---恢复内容开始---

#import "ViewController.h"

#import "Campusbeaut.h"

@interface ViewController ()< NSURLConnectionDataDelegate>

{

NSMutableData *_totalData;

NSFileHandle *_fileHandle;

long long _totalLength;

UIImageView *_image;

NSData *_data;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

_totalData = [NSMutableData data]; //相当创建一个可变data

_image=[[UIImageView alloc]initWithFrame:self.view.bounds];

UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(beaut)];

[self.view addGestureRecognizer:tap];

NSError *error;

//用它来创建一个文件

NSFileManager *fileManager = [NSFileManager defaultManager];

[fileManager createFileAtPath:@"/Users/apple/Desktop/campus.jpg" contents:nil attributes:nil];

//也可以用它来创建一个文件夹

[@"" writeToFile:@"/Users/apple/Desktop/test2.db" atomically:YES encoding:NSUTF8StringEncoding error:nil];

//用它来装数据 它不能创建文件

_fileHandle = [NSFileHandle fileHandleForWritingAtPath:@"/Users/apple/Desktop/campus.jpg"];

// 方法 一

//下载到str

NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];

NSString  *str=[NSString  stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

// NSLog(@"%@",str);

//写到文件中

NSString *[email protected]"/Users/apple/Desktop/test.db";

[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];

//把文件中的东西读取

NSData *data1=[NSData dataWithContentsOfFile:path];

//再把data 装化为string  当然可以直接读取给string

NSString *str1=[[NSString alloc]initWithData:data1 encoding:NSUTF8StringEncoding ];

// NSLog(@"--------%@",str1);

//方法 二

//把图片下载到data

_data =[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/w%3D310/sign=b6af04fe0b23dd542173a169e108b3df/c9fcc3cec3fdfc03eff99b22d63f8794a5c226a2.jpg"]];

//让图片显示出来

_image.image=[UIImage imageWithData:_data];

[self.view addSubview:_image];

//把图片装在文件中

[_data writeToFile:@"/Users/apple/Desktop/camp.jpg" atomically:YES];

//方法 三

//同步方法

NSURL *url1=[NSURL URLWithString:@"http://chzich.diandian.com/post/2014-06-11/40061950061"];

//获取开始下载时间 对应俩个结束时间

CFAbsoluteTime begin=CFAbsoluteTimeGetCurrent();//第一种

NSDate *beginDate=[NSDate date];//第二种

//将路径告知请求者

NSURLRequest *request=[NSURLRequest requestWithURL:url1];

//创建响应

NSURLResponse *response;

//使用同步方法

NSData *data2=[NSURLConnection  sendSynchronousRequest:request returningResponse:&response error:&error];

//http响应

NSHTTPURLResponse *httpResponse=(NSHTTPURLResponse *)response;//强制类型转化

//打印响应状态

NSLog(@"status code:%d",[httpResponse statusCode]);

if ([httpResponse statusCode] == 200)

{

NSLog(@"成功下载数据");

}

//同步下载时间用的第一种方法

CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();

NSLog(@"%f", end - begin);

//转化成字符串打印出来

NSString *str2=[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding ];

// NSLog(@"++++++++%@",str2);

//方法 四

//异步  貌似没同步复杂

[NSURLConnection  sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)

{

NSLog(@"下载完成........");

//这个data参数就是下载数据所处地方

NSString *str3=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

//  NSLog(@"========%@",str3);

NSLog(@"完成");

}];

NSLog(@"快到碗里来");

//从同步下载开始到异步下载结束所用时间 可调整开始位置的放置取得想要的时间  使用的是第二种方法  从下载时间可以实现优化程序

NSDate *endDate=[NSDate date];

NSLog(@"%f", [endDate timeIntervalSinceDate:beginDate]);

//方法 五

//它的机制也是同步的?  不过需要使用协议

NSURL *url2=[NSURL  URLWithString:@"http://d.hiphotos.baidu.com/image/pic/item/5ab5c9ea15ce36d3de97fa9538f33a87e850b187.jpg"];

NSURLRequest *request1=[NSURLRequest requestWithURL:url2];

NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request1 delegate:self];

[connection start];

}

-(void)beaut

{

//_data=[NSData dataWithContentsOfFile:@"/Users/apple/Desktop/campus.jpg"];

Campusbeaut *nvnv=[[Campusbeaut alloc]init];

nvnv.Pdata=self;//传值

[self presentViewController:nvnv animated:YES completion:nil    ];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark - NSURLConnectionDataDelegate

//4. 只有出错才会到这里

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

NSLog(@"Failed: %@", error);

}

//1. 先接受到响应信息,能够知道等下接受的数据是什么样的

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

//如果是多目标下载 可以通过参数connection 来判断下载来自哪个请求

NSLog(@"Total length: %lld", [response expectedContentLength]);  //网页不是正常的文件长度可能出人意料

_totalLength = response.expectedContentLength;

}

//2. 分次接受数据

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

[_totalData appendData:data];

[_fileHandle writeData:data]; //它们俩都可以来装图片data数据

float progress=(float)[_fileHandle offsetInFile]/_totalLength;

NSLog(@"Data: %.2f%%", progress * 100);

_data3=_totalData;

}

//3. 下载完成

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

NSLog(@"finished...");

}

@end

---恢复内容结束---

#import "ViewController.h"

#import "Campusbeaut.h"

@interface ViewController ()< NSURLConnectionDataDelegate>

{

NSMutableData *_totalData;

NSFileHandle *_fileHandle;

long long _totalLength;

UIImageView *_image;

NSData *_data;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

_totalData = [NSMutableData data]; //相当创建一个可变data

_image=[[UIImageView alloc]initWithFrame:self.view.bounds];

UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(beaut)];

[self.view addGestureRecognizer:tap];

NSError *error;

//用它来创建一个文件

NSFileManager *fileManager = [NSFileManager defaultManager];

[fileManager createFileAtPath:@"/Users/apple/Desktop/campus.jpg" contents:nil attributes:nil];

//也可以用它来创建一个文件夹

[@"" writeToFile:@"/Users/apple/Desktop/test2.db" atomically:YES encoding:NSUTF8StringEncoding error:nil];

//用它来装数据 它不能创建文件

_fileHandle = [NSFileHandle fileHandleForWritingAtPath:@"/Users/apple/Desktop/campus.jpg"];

// 方法 一

//下载到str

NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];

NSString  *str=[NSString  stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

// NSLog(@"%@",str);

//写到文件中

NSString *[email protected]"/Users/apple/Desktop/test.db";

[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];

//把文件中的东西读取

NSData *data1=[NSData dataWithContentsOfFile:path];

//再把data 装化为string  当然可以直接读取给string

NSString *str1=[[NSString alloc]initWithData:data1 encoding:NSUTF8StringEncoding ];

// NSLog(@"--------%@",str1);

//方法 二

//把图片下载到data

_data =[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/w%3D310/sign=b6af04fe0b23dd542173a169e108b3df/c9fcc3cec3fdfc03eff99b22d63f8794a5c226a2.jpg"]];

//让图片显示出来

_image.image=[UIImage imageWithData:_data];

[self.view addSubview:_image];

//把图片装在文件中

[_data writeToFile:@"/Users/apple/Desktop/camp.jpg" atomically:YES];

//方法 三

//同步方法

NSURL *url1=[NSURL URLWithString:@"http://chzich.diandian.com/post/2014-06-11/40061950061"];

//获取开始下载时间 对应俩个结束时间

CFAbsoluteTime begin=CFAbsoluteTimeGetCurrent();//第一种

NSDate *beginDate=[NSDate date];//第二种

//将路径告知请求者

NSURLRequest *request=[NSURLRequest requestWithURL:url1];

//创建响应

NSURLResponse *response;

//使用同步方法

NSData *data2=[NSURLConnection  sendSynchronousRequest:request returningResponse:&response error:&error];

//http响应

NSHTTPURLResponse *httpResponse=(NSHTTPURLResponse *)response;//强制类型转化

//打印响应状态

NSLog(@"status code:%d",[httpResponse statusCode]);

if ([httpResponse statusCode] == 200)

{

NSLog(@"成功下载数据");

}

//同步下载时间用的第一种方法

CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();

NSLog(@"%f", end - begin);

//转化成字符串打印出来

NSString *str2=[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding ];

// NSLog(@"++++++++%@",str2);

//方法 四

//异步  貌似没同步复杂

[NSURLConnection  sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)

{

NSLog(@"下载完成........");

//这个data参数就是下载数据所处地方

NSString *str3=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

//  NSLog(@"========%@",str3);

NSLog(@"完成");

}];

NSLog(@"快到碗里来");

//从同步下载开始到异步下载结束所用时间 可调整开始位置的放置取得想要的时间  使用的是第二种方法  从下载时间可以实现优化程序

NSDate *endDate=[NSDate date];

NSLog(@"%f", [endDate timeIntervalSinceDate:beginDate]);

//方法 五

//它的机制也是同步的?  不过需要使用协议

NSURL *url2=[NSURL  URLWithString:@"http://d.hiphotos.baidu.com/image/pic/item/5ab5c9ea15ce36d3de97fa9538f33a87e850b187.jpg"];

NSURLRequest *request1=[NSURLRequest requestWithURL:url2];

NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request1 delegate:self];

[connection start];

}

-(void)beaut

{

//_data=[NSData dataWithContentsOfFile:@"/Users/apple/Desktop/campus.jpg"];

Campusbeaut *nvnv=[[Campusbeaut alloc]init];

nvnv.Pdata=self;//传值

[self presentViewController:nvnv animated:YES completion:nil    ];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark - NSURLConnectionDataDelegate

//4. 只有出错才会到这里

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

NSLog(@"Failed: %@", error);

}

//1. 先接受到响应信息,能够知道等下接受的数据是什么样的

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

//如果是多目标下载 可以通过参数connection 来判断下载来自哪个请求

NSLog(@"Total length: %lld", [response expectedContentLength]);  //网页不是正常的文件长度可能出人意料

_totalLength = response.expectedContentLength;

}

//2. 分次接受数据

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

[_totalData appendData:data];

[_fileHandle writeData:data]; //它们俩都可以来装图片data数据

float progress=(float)[_fileHandle offsetInFile]/_totalLength;

NSLog(@"Data: %.2f%%", progress * 100);

_data3=_totalData;

}

//3. 下载完成

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

NSLog(@"finished...");

}

@end

关于下载的五种方式,布布扣,bubuko.com

时间: 2024-08-08 17:46:53

关于下载的五种方式的相关文章

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

Spring事务配置的五种方式

Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部分

PHP读取文件内容的五种方式

php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp);-- php读取文件内容: -----第一种方法-----fread()-------- ? 1 2 3 4 5 6 7 8 <?php $file_path = "test.txt"; if(file_exists($file_path)){ $fp = fopen($file_path,"r"); $str

EDM营销之数据细分的五种方式

我们都知道,EDM营销的终极目的仍然是与目标客户群体实现联接,拉动销售业绩.内容是B2B邮件营销的重中之重,提供能够匹配客户真实需要的有效内容,即实现B2B个性化邮件营销,是B2B邮件营销成功的关键因素.怎样实现B2B领域的个性化邮件营销呢?首先需要对B2B客户进行数据细分.结合多年来在B2B邮件营销领域的诸多成功实战经验,下面来看看 Focussend营销团队在本期为B2B营销者奉上实现B2B个性化邮件营销的五种数据细分方式. 博文配图:关于EDM营销数据细分的五种方式 方式一:按职能细分 B

Android数据存储五种方式总结

本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据     2 文件存储数据       3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据     适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分

JavaScript实现页面跳转的五种方式

JavaScript实现页面跳转的五种方式 第一种:<script type="text/javascript" language="javascript"> window.location.href="login.jsp?backurl="+window.location.href;</script> 第二种:<script type="text/javascript" language=&qu

C#读取Excel五种方式的体会

原地址: http://blog.csdn.net/dapengbusi/article/details/38117817 http://blog.csdn.net/dapengbusi/article/details/38118679 http://blog.csdn.net/dapengbusi/article/details/38118997 C#读取Excel五种方式的体会,布布扣,bubuko.com

SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式

这对时间在学习SSH中Spring架构,Spring的事务配置做了具体总结.在此之间对Spring的事务配置仅仅是停留在听说的阶段,总结一下.总体把控.通过这次的学习发觉Spring的事务配置仅仅要把思路理清,还是比較好掌握的. 总结例如以下: Spring配置文件里关于事务配置总是由三个组成部分,各自是DataSource.TransactionManager和代理机制这三部分.不管哪种配置方式.一般变化的仅仅是代理机制这部分. DataSource.TransactionManager这两部

Github项目解析(九)--&gt;实现Activity跳转动画的五种方式

转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了在Activity启动过程中获取组件宽高的五种方式.在Activity的启动过程中如果我们直接在生命周期方法中通过view.getWidth()或者是view.getHeight()方法获取组件的宽度和高度其结果都是0,为什么会出现这个问题呢? 其实看过我以前写过的Activity启动流程  Activity布局加载流程  Activity布局绘制流程  的同学应该对Activity的启动流程和其布局加载绘制流程不陌生,Activity的启动