Ist der Aufruf von read: maxLength: einmal für jedes NSStreamEventHasBytesAvailable korrekt?

Beispielcode vonStream-Programmierhandbuch:

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

Was passiert, wenn die Anzahl der verfügbaren Bytes größer als die Puffergröße ist?

In einem solchen Fall ruft- read:maxLength: once verbraucht nur einen Teil der verfügbaren Bytes, aber das gesamte Ereignis. Wenn es das letzte @ iNSStreamEventHasBytesAvailable dann gehen die restlichen Bytes verloren.

So scheint es mir, dass dieser Code nicht korrekt ist. Der richtige Code sollte eine Schleife verwenden, um alle verfügbaren Bytes für jedes @ zu verbraucheNSStreamEventHasBytesAvailable.

Habe ich recht? Ist der Beispielcode falsch?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage