background image

创建并初始化输出流到内存的例子:
- (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 ...
    }
}