将NSMutableData作为流读取

时间:2010-11-25 09:36:45

标签: objective-c core-foundation

我手头有一个NSMutableData实例,我想用输入流读取它(类似于Java的ByteArrayInputStream)。

我注意到CFReadStream有一个initForReadingWithData方法,但我无法弄清楚如何使用它。

任何人都可以提供关于如何使用它的示例位,或者如何提供内存输入流吗?

2 个答案:

答案 0 :(得分:0)

  

我注意到CFReadStream有一个initForReadingWithData方法,...

咦? CFReadStream没有方法;它有功能。 NSInputStream有initWithData:

对于NSInputStream,您需要成为流的委托,打开流并响应其委托消息。其中大部分位于抽象类NSStream中,它是NSInputStream和NSOutputStream的超类。

您可能会发现CFReadStream更容易使用,因为它允许您直接调用函数来直接从流中读取,而不必遵循异步“不要打电话给我 - 我将调用 - 你的要求。对于从网络读取,我建议不要这样做,但是因为你是从内存缓冲区读取的,所以它应该是无害的。

也就是说,创建流而不是仅仅遍历字节的主要原因是将其传递给接受任何流的内容,包括可以从网络读取的流。如果您正在实施该方面,则应该异步执行。

答案 1 :(得分:0)

这是我达成的解决方案:

NSMutableData *msg;
CFReadStreamRef in = CFReadStreamCreateWithBytesNoCopy(nil, [msg mutableBytes], [_msg length], kCFAllocatorNull);
CFReadStreamOpen(in);
// read here as stream using CFReadStreamRead
CFRelease(in);