【发布时间】:2014-11-24 13:09:55
【问题描述】:
我需要从网上下载大文件,并保存到本地磁盘。
一开始我是这样保存数据的:
- (void)saveToLocalFile:(NSData *)data withOffset:(unsigned long long)offset{
NSString* localFile = [self tempLocalFile];
dispatch_async(mFileOperationQueue_, ^{
NSFileHandle* fileHandle = [NSFileHandle fileHandleForWritingAtPath:localFile];
if (fileHandle == nil) {
[data writeToFile:localFile atomically:YES];
return;
}
else {
[fileHandle seekToFileOffset:offset];
[fileHandle writeData:data];
[fileHandle closeFile];
}
});
}
作为AFNetworking 使用NSOutputstream 将数据保存到本地,如下所示:
NSUInteger length = [data length];
while (YES) {
NSInteger totalNumberOfBytesWritten = 0;
if ([self.outputStream hasSpaceAvailable]) {
const uint8_t *dataBuffer = (uint8_t *)[data bytes];
NSInteger numberOfBytesWritten = 0;
while (totalNumberOfBytesWritten < (NSInteger)length) {
numberOfBytesWritten = [self.outputStream write:&dataBuffer[(NSUInteger)totalNumberOfBytesWritten] maxLength:(length - (NSUInteger)totalNumberOfBytesWritten)];
if (numberOfBytesWritten == -1) {
break;
}
totalNumberOfBytesWritten += numberOfBytesWritten;
}
break;
}
if (self.outputStream.streamError) {
[self.connection cancel];
[self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:self.outputStream.streamError];
return;
}
}
写文件时使用NSOutputstream比NSFileHandle有什么优势?
在性能方面有什么优势?
【问题讨论】:
-
你使用 NSFileHandle 增量保存数据吗? Ifso .. 这就是这种情况下输出流的要点
-
其实我很想知道在性能方面有什么优势?
-
我尝试了你的两种方法,它们都有效并且我的单元测试通过了,但是当我在 Finder 中打开实际文件时,它总是为空。你有什么想法吗?
标签: ios afnetworking nsfilemanager nsfilehandle nsoutputstream