我需要從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