大文件下载--持续写入到内存中

2017-05-19  本文已影响0人  小的小碰撞

方法1

 // 获取缓存文件夹
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    // log --> /Users/Mac/Library/Developer/CoreSimulator/Devices/06B6E231-11F9-450B-890C-0B763B210CD9/data/Containers/Data/Application/C59F0A3B-BB35-4F48-BBDF-E750FCBDA02C/Library/Caches
    NSLog(@"caches---%@",caches);
    
    // 文件路径
    NSString *file = [caches stringByAppendingPathComponent:@"1233"];
    
    NSLog(@"file---%@",file);
    
    // 创建一个空的文件
    [[NSFileManager defaultManager]createFileAtPath:file contents:nil attributes:nil];
    
     // 创建文件句柄
    NSFileHandle * fileHandle = [NSFileHandle fileHandleForWritingAtPath:file];
    
    // 指定数据的写入位置-- 文件内容的最后面
    [fileHandle seekToEndOfFile];
    
    // 写入数据
    NSData *data;
    [fileHandle writeData:data];
    
    //等待写入完成后 关闭handle
    [fileHandle closeFile];
    fileHandle = nil;

方法2 使用 输出流NSOutputStream

 // 利用NSOutputStream往Path中写入数据(append为YES的话,每次写入都是追加到文件尾部)
    self.stream = [[NSOutputStream alloc] initToFileAtPath:file append:YES];
    // 打开流(如果文件不存在,会自动创建)
    [self.stream open];

   [self.stream write:[data bytes] maxLength:data.length];
    NSLog(@"didReceiveData-------");
[self.stream close];
#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);
    
    // 利用NSOutputStream往Path中写入数据(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
上一篇 下一篇

猜你喜欢

热点阅读