A chamada read: maxLength: uma vez para cada NSStreamEventHasBytesAvailable está correta?

Código de exemplo deGuia de programação de stream:

- (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

E se o número de bytes disponíveis for maior que o tamanho do buffer?

Nesse caso, chamar- read:maxLength: uma vez consome apenas parte dos bytes disponíveis, mas todo o evento. Se é o últimoNSStreamEventHasBytesAvailable os bytes restantes serão perdidos.

Portanto, parece-me que este código não está correto. O código correto deve usar um loop para consumir todos os bytes disponíveis para cadaNSStreamEventHasBytesAvailable.

Estou certo? O código de amostra está errado?

questionAnswers(1)

yourAnswerToTheQuestion