gpt4 book ai didi

ios - 使用 NSOutputstream 有什么好处?

转载 作者:行者123 更新时间:2023-11-28 18:18:28 30 4
gpt4 key购买 nike

我需要从网上下载大文件,并保存到本地磁盘。

一开始,我是这样保存数据的:

- (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有什么优势?

在性能方面有什么优势?

最佳答案

有几种不同的技术可以读取和写入文件内容,iOS 和 OS X 几乎都支持所有这些技术。它们本质上都做同样的事情,只是方式略有不同。有些技术要求您按顺序读取和写入文件数据,而其他技术可能允许您跳转并仅对文件的一部分进行操作。一些技术自动支持异步读取和写入,而另一些技术则同步执行,以便您更好地控制它们的执行。

从可用技术中进行选择是决定您希望对读写过程进行多少控制以及您希望花费多少精力编写文件管理代码。 Cocoa 流等更高级别的技术限制了您的灵 active ,但提供了易于使用的界面。 POSIX 和 Grand Central Dispatch (GCD) 等较低级别的技术可为您提供最大的灵 active 和功能,但需要您编写更多代码。

异步读写文件

因为文件操作涉及访问磁盘(可能是网络服务器上的磁盘),所以异步执行这些操作几乎总是首选。 Cocoa 流和 Grand Central Dispatch (GCD) 等技术旨在始终异步执行,这使您可以专注于读取和写入文件数据,而不必担心代码的执行位置。

使用流线性处理整个文件

如果你总是从头到尾读取或写入文件的内容,流提供了一个简单的异步接口(interface)。流通常用于管理套接字和其他类型的数据源,其中数据可能随时间变得可用。但是,您也可以使用流以一个或多个突发读取或写入整个文件。有两种类型的流可用:

  • 使用 NSOutputStream 将数据按顺序写入磁盘。
  • 使用NSInputStream 对象从磁盘顺序读取数据。

请通过Apple Documentaion代码解释。

关于ios - 使用 NSOutputstream 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27105652/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com