创建并初始化输出流到内存的例子:
- (void)createOutputStream {
NSLog(@"Creating and opening NSOutputStream...");
// oStream is an instance variable
oStream = [[NSOutputStream alloc] initToMemory];
[oStream setDelegate:self];
[oStream
scheduleInRunLoop:[NSRunLoop
currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
}
2)在流 open 之后,你可以获取
streamStatus
hasSpaceAvailable
streamError
状态为一个 NSStreamStatus 枚举,指示流是 opening,writing,
流的末尾 等等
代 理 同 样 是 stream:handleEvent: event 也 是 NSStreamEvent 枚 举 , 一 半 是
NSStreamEventOpenCompleted.NSStreamEventHasSpaceAvailable,
和
NSStreamEventEndEncountered。
Listing 2 Handling a space-available event
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
switch(eventCode) {
case NSStreamEventHasSpaceAvailable:
{
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 >= 1024) ?
1024 : (data_len-byteIndex));
uint8_t buf[len];
(void)memcpy(buf, readBytes, len);
len = [stream write:(const uint8_t *)buf maxLength:len];
byteIndex += len;
break;
}
// continued ...
}
}