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?