¿Es correcto leer read: maxLength: una vez por cada NSStreamEventHasBytesAvailable?

Código de muestra deGuía de programación de transmisiones:

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

    switch(eventCode) {
        case NSStreamEventHasBytesAvailable:
        {
            if(!_data) {
                _data = [[NSMutableData data] retain];
            }
            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

¿Qué sucede si el número de bytes disponibles es mayor que el tamaño del búfer?

En tal caso, llamando- read:maxLength: una vez solo consume parte de los bytes disponibles, pero todo el evento. Si es el ultimoNSStreamEventHasBytesAvailable entonces los bytes restantes se pierden.

Entonces me parece que este código no es correcto. El código correcto debe usar un bucle para consumir todos los bytes disponibles para cadaNSStreamEventHasBytesAvailable.

Estoy en lo cierto? ¿Está mal el código de muestra?

Respuestas a la pregunta(1)

Su respuesta a la pregunta