Ios 知道来自NSStream的数据是完整的

Ios 知道来自NSStream的数据是完整的,ios,cocoa-touch,nsdata,nsstream,transmission,Ios,Cocoa Touch,Nsdata,Nsstream,Transmission,我正在使用NSStream通过MCSession发送UIImage数据块 当我得到字节时 - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { if (eventCode == NSStreamEventHasBytesAvailable) { // read data and append to self.data // how to know that self.d

我正在使用
NSStream
通过
MCSession
发送
UIImage
数据块

当我得到字节时

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {

   if (eventCode == NSStreamEventHasBytesAvailable) {

      // read data and append to self.data
      // how to know that self.data can be used to create UIImage

   }

}

我将它们附加到可变数据实例中。问题是如何知道累积的数据代表完整的图像,因此我可以使用
-[UIImage initWithData:
创建它?

您应该注意
nsstreamventended

流不知道其内容。如果您不能依靠流结束来告诉您数据已完成,那么您需要使用/创建一些包含“已完成”信号的传输协议,或者尝试创建映像并在失败时采取适当的操作。

NSSTREATEVENTENDED仅在流完成时才有用,但情况并非如此(在这种情况下,流=1个图像,在这种情况下,流=n个图像)。。。或者每个图像使用一个流更好吗?每个图像使用一个流肯定是一种方法:)@Lance但是你怎么知道什么时候打开一个InputStream来获取一个图像?也许一个图像一个流对发送者来说是可以的:你们想要发送图像->你们打开一个流->写块->关闭流。但是,如果有多个传入图像,接收器将如何处理它们?适当的“完成”信号是什么?取决于您的应用程序。你必须想出某种数据包格式,每个发送的数据块都有一个标题。现在我开始找到正确的轨道,我可以为0/1保留缓冲区的最后4个字节,这表示发送了一个完整的对象。。。您认为这样做更好吗,还是每个图像都有一个流?编写自己的传输协议似乎很快就会变得复杂。我建议您尽可能利用流的现有功能,是的,让一个流携带一个图像。@Josh Caswell但您如何知道何时打开InputStream以获取该图像?也许一个图像一个流对发送者来说是可以的:你们想要发送图像->你们打开一个流->写块->关闭流。但是,如果有多个图像通过多个流发送,接收器将如何处理传入的图像?我是新来的。