如何在Objective-C中保持输出流的打开



我正在将数据写入事件内部的流:

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

如下(取自苹果的文档):

case NSStreamEventHasSpaceAvailable:
    uint8_t *readBytes = (uint8_t *)[self.outData mutableBytes];            
    readBytes += byteIndex;            
    int dataLength = [self.outData length];            
    unsigned int length = ((dataLength - byteIndex >= 1024) ? 1024 : (dataLength - byteIndex));            
    uint8_t buffer[length];            
    (void)memcpy(buffer, readBytes, length);            
    length = [self.outputStream write:(const uint8_t *)buffer maxLength:length];            
    byteIndex += length;            
    break;

但是,当输出流中没有其他内容可写时,会调用事件NSStreamEventEndEncountered,因此会丢弃输出流。我如何保持这条流的开放性以供写作?根据苹果的文档,该事件被正确调用,因为输出流中没有写入任何内容。有什么想法吗?

您是否已将流放入运行循环中?请参阅此处的示例:http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server

文档在这一点上还不清楚,但一个合理的解释是,当您写入到其容量时,流将发送NSStreamEventEndEncountered。(不清楚的部分是,这是适用于所有流,还是仅适用于您指定容量的流。例如,当文件所在的卷已满时,基于文件的流可以发送NSStreamEventEndEncountered。)

考虑到"容量"的定义是你写的东西不能超过那么多,保持流在这个点之后是没有意义的。即使您有更多的字节要写,流也没有地方放它们。

相关内容

  • 没有找到相关文章

最新更新