Чтение больших файлов из NSInputstream не работает в ios

Я пытаюсь прочитать большой файл изображения размером более 300 КБ из NSInputStream. Но я получаю только до 300 КБ. Другие данные отсутствуют. Не могли бы вы помочь мне, если знаете. я жду вашего ценного ответа. Я упомянул свой код ниже: вызовите этот метод readAllData из NSStreamEventsHasBytesAvailable:

    - (void)readAllData {

    if (_readData == nil) {
    _readData = [[NSMutableData data] retain];
    }

    while ([[_session inputStream] hasBytesAvailable])
    {
    unsigned   int bytesRead = 0;
    bytesRead = [[_session inputStream] read:buf maxLength:EAD_INPUT_BUFFER_SIZE];

    if (bytesRead) {

        NSMutableString *_string = [NSMutableString stringWithString:@""];
        for (int i = 0; i < _readData.length; i++) {
            unsigned char _byte;
            [_readData getBytes:&_byte range:NSMakeRange(i, 1)];
            if (_byte >= 32 && _byte < 127) {
                [_string appendFormat:@"%c", _byte];
            } else {
                [_string appendFormat:@"[%d]", _byte];
            }
        }

        [_readData appendBytes:(const void *)buf length:bytesRead];

    }

}

NSString *string=[NSString stringWithFormat:@"%d",_readData.length];
UIAlertView *sesView = [[UIAlertView alloc] initWithTitle:@"readDatalength"
                                                  message:string
                                                 delegate:self
                                        cancelButtonTitle:nil otherButtonTitles:@"OK"  , nil];
[sesView show];

}


person vishnu    schedule 21.09.2015    source источник
comment
Каков размер EAD_INPUT_BUFFER_SIZE?   -  person Samraan Khaan    schedule 21.09.2015
comment
1024, а также я увеличил до 5120. Но бесполезно   -  person vishnu    schedule 21.09.2015


Ответы (1)


Когда метод hasBytesAvailable возвращает НЕТ, это не всегда означает, что NSInputStream пуст. NSInputStream находится в конце только тогда, когда его статус NSStreamStatusAtEnd. Например, поток, который был построен из NSURL, является асинхронным и у него нет всех байтов сразу после открытия. Если это ваш случай, вы должны подписаться на NSInputStream, объявив некоторый класс как NSStreamDelegate.

person Pavel Osipov    schedule 22.09.2015