Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c CFStreamCreateBoundPair流会丢失缓冲区大小较小的数据_Objective C_Streaming_Buffer_Nsurlconnection_Nsstream - Fatal编程技术网

Objective c CFStreamCreateBoundPair流会丢失缓冲区大小较小的数据

Objective c CFStreamCreateBoundPair流会丢失缓冲区大小较小的数据,objective-c,streaming,buffer,nsurlconnection,nsstream,Objective C,Streaming,Buffer,Nsurlconnection,Nsstream,我正在尝试用Objective-C中的libxml2创建一个流式html解析器。我有一个下载数据的NSURLConnection,我在NSInputStream和NSOutputstream中创建了cfstreamCreateBundpair,缓冲区大小为10字节。当从NSURLConnection接收数据时,我将其写入输出流。当接收的数据量大于缓冲区大小时,会出现此错误,剩余的数据将丢失。这应该发生吗?根据我的理解,我认为数据将排队并以缓冲区大小的块写入输入流 您需要确保接收到的区块中的所有数

我正在尝试用Objective-C中的libxml2创建一个流式html解析器。我有一个下载数据的NSURLConnection,我在NSInputStream和NSOutputstream中创建了
cfstreamCreateBundpair
,缓冲区大小为10字节。当从NSURLConnection接收数据时,我将其写入输出流。当接收的数据量大于缓冲区大小时,会出现此错误,剩余的数据将丢失。这应该发生吗?根据我的理解,我认为数据将排队并以缓冲区大小的块写入输入流


您需要确保接收到的区块中的所有数据最终都写入流中

您可以通过委托方法中的一个简单循环来实现这一点,在这个循环中,您可以连续地写入接收到的块的一部分,直到它完全写入流中。但是,这可能会导致委托正在运行的线程无法确定地阻塞:如果使用者没有准备好使用更多字节,则输出流将在尝试写入更多数据时阻塞

或者,您可以异步地将
NSData
对象分派到一个队列,其中一个块正在执行循环,并在循环完成之前写入所有数据。但是,如果使用者速度慢且数据量大,这可能会导致系统内存不足,因为所有
NSData
都在调度队列中运行,直到数据块完成


这两种方法都有利弊。我倾向于选择第一种,因为没有内存问题,而且连接会将传入的字节缓冲到某个上限——在它停止确认更多字节之前。

您需要确保接收到的块中的所有数据最终都写入流中

您可以通过委托方法中的一个简单循环来实现这一点,在这个循环中,您可以连续地写入接收到的块的一部分,直到它完全写入流中。但是,这可能会导致委托正在运行的线程无法确定地阻塞:如果使用者没有准备好使用更多字节,则输出流将在尝试写入更多数据时阻塞

或者,您可以异步地将
NSData
对象分派到一个队列,其中一个块正在执行循环,并在循环完成之前写入所有数据。但是,如果使用者速度慢且数据量大,这可能会导致系统内存不足,因为所有
NSData
都在调度队列中运行,直到数据块完成

这两种方法都有利弊。我倾向于选择第一种,因为没有内存问题,而且连接会在停止确认更多字节之前,将传入的字节缓冲到某个上限