Этот код будет работать для чтения вашего потока:
NSInputStream *insrm = [[NSInputStream alloc] initWithData:data];
[insrm open];
while ([insrm hasBytesAvailable]) {
uint8_t buf[128];
NSUInteger bytesRead = [insrm read:buf maxLength:128];
NSLog(@"read %d bytes",bytesRead);
}
getBuffer:length:
вернет ДА, если вы не откроете поток. Однако изначально он не будет иметь допустимых значений в буфере или лене. Я думаю, что это связано с тем, что это неблокирующая операция. Предположительно значения будут заполнены позже.
В любом случае, если вы хотите заблокировать, используйте то, что у меня есть выше. Если вы не хотите блокировать, вы должны запланировать поток ввода в цикле выполнения и реализовать метод делегата stream:handleEvent:
. Однако даже это не гарантирует, что вы никогда не заблокируете. Вместо этого вы можете искать библиотеку, которая предлагает другой уровень абстракции и обрабатывает поток в отдельном потоке для вас.