CFStreamCreateBoundPair 正在将 4kb 数据写入流,流将解析包含 xml 起始节点且不包含结束节点的数据

Posted

技术标签:

【中文标题】CFStreamCreateBoundPair 正在将 4kb 数据写入流,流将解析包含 xml 起始节点且不包含结束节点的数据【英文标题】:CFStreamCreateBoundPair is writing 4kb data to stream and stream will parse the data which contains start node of xml and it doesnt contain end node 【发布时间】:2013-02-06 13:46:13 【问题描述】:

。如何编写代码和管理代码,以便我们将正确的 xml 数据写入 nsoutputstream。

CFStreamCreateBoundPair(NULL, (CFReadStreamRef *)&iStream, (CFWriteStreamRef *)&oStream,4096);

【问题讨论】:

您是否使用 5.0 版之前的 ios?如果是这样,此网址上CFStreamCreateBoundPairCompat() 附近的评论可能会引起您的兴趣:developer.apple.com/library/ios/#samplecode/… 苹果给出的代码中不包含管理xml节点。 这无关紧要。 CFStreams 不关心 XML。这对他们来说都是“字节”。我试着回答你的问题。希望它有所帮助。 我尝试了相同的代码。它仍然给出 开始节点和一些数据,但我没有得到 ​​cipherValue> 结束节点。如何解决这个问题?如果有人会很感激可以解决这个问题。 【参考方案1】:

绑定流对的工作方式是,您可以将块写入写入流,而其他内容可以从读取流中读取块。您已在此处将 transferBufferSize 设置为 4096。这表明数据将以 4096 字节 (4K) 的块从写入流移动到读取流。如果您的源数据大于 4K 但长度小于 8K,那就可以解释为什么您只得到它的前 4K。例如,如果您的数据长 6K,那么前 4K 将被发送到读取流,然后下一个 2K 将排队,但我的理解是它会在缓冲区中等待,直到发生以下两种情况之一:

    到达的数据足以完成第二个 4K 块。 写入流已关闭。

因此,如果 6K 是您要写入写入流的全部内容,那么您需要使用 CFWriteStreamClose(oStream); 关闭写入流,以便将最后的 2K 发送到读取流。否则,我的期望是它会永远坐在那里。

【讨论】:

我在 do while 循环中写入 o/p 流.. 你在说什么? dobytesWritten = [oStream write:(const uint8_t *)[self.m_cWebData bytes] maxLength:dataLength - bytesWrittenSoFar]; NSLog(@"Rcvd Data=%d 写入 = %d",[self.m_cWebData length],bytesWritten);[self.m_cWebData replaceBytesInRange:NSMakeRange(0,bytesWritten) withBytes:"" length:0];NSLog(@"重置后的 Rcvd 数据 =%d ",[self.m_cWebData length]);assert(bytesWritten != 0);if (bytesWritten != -1) 我将写入流 stream:(NSStream *)s handleEvent: hasspaceavailable 也在调用 writetostream 方法 我认为您误解了这个问题。我已将所有服务器数据保存到 nsmutabledata 中。但我只写入了 4kb 的数据流。 你不能在这样的 do/while 循环中使用 CFStreams。他们依赖运行循环来运行,只要你在你的 do/while 循环中,它就不会运行。此外,如果您已经在内存中拥有所有数据,只需在一次调用中将其全部写入流;在这一点上,尝试将其分块几乎没有优势。您可能应该阅读 CFStreams、NSRunLoops 以及它们如何协同工作。

以上是关于CFStreamCreateBoundPair 正在将 4kb 数据写入流,流将解析包含 xml 起始节点且不包含结束节点的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何求函数的最小正周期?

一个正整数能否表示成连续个正整数之和

啥是最小正周期

将正整数n划分成一系列正整数之和,求正整数的不同划分个数

js验证正整数

写一个方法,输入两个正整数,输出在两个正整数范围内即被3整除,又被7整除的正整数