gpt4 book ai didi

objective-c - 将来自Web服务的大量数据分块写入文件

转载 作者:行者123 更新时间:2023-12-01 19:23:55 26 4
gpt4 key购买 nike

我正在尝试通过以下方法解决从Web服务接收大量数据的一般情况:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

对于小数据,我只使用:
[webData appendData:data];

最后,在:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection

我使用输出流将其写入我的文件。

如果数据量巨大,只有几MB数据,那该怎么办?在这种情况下,最好将 connection:didReceiveData:中的数据多次转储到同一文件中。使用 NSFileHandle听起来很容易,但是在考虑异步/非阻塞UI的同时进行读写同步并不容易(至少对我而言)。

知道这个案例有什么好的方法吗?
我当时正在考虑使用 NSThread,每次都对块大小进行排队。有没有更好/更简便的方法呢?

最佳答案

您知道,我实际上为此做了一个类(非ARC,但仍然可以使用)here

用法示例:

// in init
RJRStreamWriter myWriter = [[RJRStreamWriter alloc] initWithLocalFile:@"path/to/my/file" andAppend:NO];

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
static dispatch_queue_t asyncQueue;
static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{
asyncQueue = dispatch_queue_create("asyncQueue", NULL);
});

dispatch_async(asyncQueue, ^{
// this method is optimized, and aggregates NSOutputStream, NSMutableData, and NSFileHandle
[myWriter writeData:data];
});
}

关于objective-c - 将来自Web服务的大量数据分块写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887326/

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