Пример кода из Руководства по потоковому программированию:
- (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
Что делать, если количество доступных байтов превышает размер буфера?
В таком случае однократный вызов - read:maxLength:
потребляет не только часть доступных байтов, но и все событие. Если это последние NSStreamEventHasBytesAvailable
, то остальные байты теряются.
Так что мне кажется, что этот код не правильный. Правильный код должен использовать цикл для использования всех доступных байтов для каждого NSStreamEventHasBytesAvailable
.
Я прав? Пример кода неправильный?