我需要从Internet下载大文件,并将其保存到本地磁盘。使用NSOutputstream有什么优势?
起初,我保存的数据是这样的:
- (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 .. thats thats在这种情况下输出流的主要点 – 2014-11-24 13:25:28
其实,我想知道什么是在性能方面的优势? – foogry 2014-11-25 02:19:44
我尝试了你的两个方法,他们的工作和我的单元测试通过,但是当我在Finder中打开实际文件时,它总是空的。你有什么想法? – 2016-12-14 03:40:04