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

CFStreamCreateBoundPair 正在将 4kb 数据写入流,流将解析包含 xml 起始节点且不包含结束节点的数据。如何编写代码和管理代码,以便我们将正确的 xml 数据写入 nsoutputstream。

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

【问题讨论】:

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

标签: objective-c stream nsoutputstream


【解决方案1】:

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

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

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

【讨论】:

  • 我在 do while 循环中写入 o/p 流.. 你在说什么?
  • do{bytesWritten = [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 以及它们如何协同工作。
猜你喜欢
  • 2018-07-25
  • 2016-04-09
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
相关资源
最近更新 更多