background image

            }
            uint8_t buf[1024];
            unsigned int len = 0;
            len = [(NSInputStream *)stream read:buf maxLength:1024];
            if(len) {
                [_data appendBytes:(const void *)buf length:len];
                // bytesRead is an instance variable of type NSNumber.
                [bytesRead setIntValue:[bytesRead intValue]+len];
            } else {
                NSLog(@"no buffer!");
            }
            break;
        }
        // continued

3)销毁流对象:
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
    switch(eventCode) {
        case NSStreamEventEndEncountered:
        {
            [stream close];
 

                      [stream   removeFromRunLoop:[NSRunLoop   currentRunLoop] 

forMode:NSDefaultRunLoopMode];
            [stream release];
            stream = nil; // stream is ivar, so reinit it
            break;
        }
        // continued ...
    }
}

二,向输入流写入:
1)创建并初始化一个 NSOutputStream,并设置一个代理
2)安排流对象到一个 run loop 并打开。
3)处理事件
4)如果流对象已经将数据写入内存,通过键 NSStreamDataWritenToMemoryStreamKey 来
获得数据。
5)当没有更多的数据需要写时,销毁流对象。

1)准备流对象:必须给输入流指定一个目标,刻意是一个文件,一个 C buffer,应用程
序内存,或一个网络 socket