使用 NSStreamEventHasSpace 可用事件,我试图将一个简单的 NSString 写入 NSOutputStream。以下是该活动的内容:
uint8_t *readBytes = (uint8_t *)[data mutableBytes];
readBytes += byteIndex; // instance variable to move pointer
int data_len = [data length];
unsigned int len = ((data_len - byteIndex >= 12) ?
12 : (data_len-byteIndex));
uint8_t buf[len];
(void)memcpy(buf, readBytes, len);
len = [output write:(const uint8_t *)buf maxLength:len];
NSLog(@"wrote: %s", buf);
byteIndex += len;
我几乎是从苹果那里得到的。数据在我的 viewDidLoad 方法中初始化
data = [NSMutableData dataWithData:[@"test message" dataUsingEncoding:NSUTF8StringEncoding]];
[data retain];
HasSpaceAvailable 事件被调用两次。在第一个中,整个消息都写有字符“N”。附加到它。第二次,NSLog 报告写入了一条空白消息(非空)。然后,发生 EndEncountered 事件。在那种情况下,我有
NSLog(@"event: end encountered");
assert([stream isEqual:output]);
NSData *newData = [output propertyForKey: NSStreamDataWrittenToMemoryStreamKey];
if (!newData) {
NSLog(@"No data written to memory!");
} else {
NSLog(@"finished writing: %@", newData);
}
[stream close];
[stream removeFromRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[stream release];
output = nil;
break;
我也从苹果那里得到了这个。但是,“没有数据写入内存!” 已记录。任何时候都不会发生错误,而且另一端似乎没有收到任何数据。