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?