首页 > 代码库 > 源码0603-01-了解-大文件下载(NSOutputStream)

源码0603-01-了解-大文件下载(NSOutputStream)

NSOutputStream 数据流的使用

 

//  ViewController.m//  01-了解-大文件下载(NSOutputStream)#import "ViewController.h"@interface ViewController () <NSURLConnectionDataDelegate>/** 输出流对象 */@property (nonatomic, strong) NSOutputStream *stream;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"]] delegate:self];}#pragma mark - <NSURLConnectionDataDelegate>- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    // response.suggestedFilename : 服务器那边的文件名        // 文件路径    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];    NSString *file = [caches stringByAppendingPathComponent:response.suggestedFilename];    NSLog(@"%@", file);        // 利用NSOutputStreamPath中写入数据(append为YES的话,每次写入都是追加到文件尾部    self.stream = [[NSOutputStream alloc] initToFileAtPath:file append:YES];    // 打开流(如果文件不存在,会自动创建)    [self.stream open];}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    [self.stream write:[data bytes] maxLength:data.length];    NSLog(@"didReceiveData-------");}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{    [self.stream close];    NSLog(@"-------");}@end

 

//  ViewController.m//  03-NSURLConnection与RunLoop#import "ViewController.h"@interface ViewController () <NSURLConnectionDataDelegate>/** runLoop */@property (nonatomic, assign) CFRunLoopRef runLoop;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        dispatch_async(dispatch_get_global_queue(0, 0), ^{        NSURLConnection *conn = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_01.png"]] delegate:self];        // 决定代理方法在哪个队列中执行        [conn setDelegateQueue:[[NSOperationQueue alloc] init]];                // 启动子线程的runLoop//        [[NSRunLoop currentRunLoop] run];                self.runLoop = CFRunLoopGetCurrent();                // 启动runLoop        CFRunLoopRun();    });}#pragma mark - <NSURLConnectionDataDelegate>- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    NSLog(@"didReceiveResponse----%@", [NSThread currentThread]);}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{        NSLog(@"didReceiveData----%@", [NSThread currentThread]);}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{    NSLog(@"connectionDidFinishLoading----%@", [NSThread currentThread]);        // 停止RunLoop    CFRunLoopStop(self.runLoop);}@end

 

源码0603-01-了解-大文件下载(NSOutputStream)