Objective-C:从URL读取特定的缓冲区大小

时间:2011-01-22 18:21:53

标签: objective-c buffering

我需要异步下载URL中的大文件,并在处理数据之前将缓冲区(例如4096字节)填充到特定大小。使用NSURLConnection之类的内置对象会很棒,但我遇到了一些问题。

使用NSURLConnectiondidReceiveData:data消息决定何时自行触发。例如,我可能会在第一次收到954个字节,然后在完成下载之前收到1048个字节。无论如何我可以修改NSURLConnection以强制它在触发接收消息之前读取我需要的缓冲区大小吗?

我也研究过使用CFNetwork类,但是这看起来有点困难,如果可能的话也希望避免使用它。

此外,我可以通过使用众所周知的AsyncSocket类来完成此任务,但之后我必须解析HTTP标头,我感觉更多问题会出现在其他Web服务器上配置。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用NSURLConnection,您必须将数据读入您自己的缓冲区(例如NSData对象)。那么为什么不是每隔4096字节从那个缓冲区读一次呢?

听起来你只对处理数据时感兴趣,而不是保留所有数据。所以,每当你收到数据(伪代码)时,也许你可以这样做:

while buffer.size > 4096:
  copy first 4096 bytes into separate buffer
  process separate buffer
  delete first 4096 bytes from buffer

然后在连接关闭时处理剩下的任何内容(如果需要)。