我正在尝试用Objective-C中的libxml2创建一个流html解析器。我有一个下载数据的NSURLConnection,我用CFStreamCreateBoundPair
在NSInputStream和NSOutputstream中创建了一个10字节的小缓冲区。当从NSURLConnection接收到数据时,我将其写入输出流。当接收的数据量大于缓冲区大小时,会出现剩余数据丢失的情况。这是应该发生的吗?根据我的理解,我认为数据将被排队,并以缓冲区大小的块写入输入流。
发布于 2013-05-20 20:32:54
您需要确保接收到的区块中的所有数据最终都写入到流中。
您可以通过委托方法中的一个简单循环来实现这一点,在此循环中,您可以连续写入接收到的块的一部分,直到它完全写入到流中。但是,这可能会导致正在运行委托的线程发生不确定的阻塞:如果使用者没有准备好使用更多字节,则输出流将在尝试写入更多数据时阻塞。
或者,您可以将NSData
对象异步分派到一个队列,在该队列中,一个块正在执行循环,并在循环完成之前写入所有数据。但是,如果使用者速度慢且数据很大,这可能会导致系统耗尽内存-因为所有NSData
都在分派队列中,直到数据块完成。
这两种方法各有优缺点。我倾向于选择第一种方法,因为没有内存问题,并且连接将缓冲传入的字节,直到它停止接收更多的字节。
https://stackoverflow.com/questions/16601414
复制相似问题