Чтение больших файлов из 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];
}
1 ответ
Когда метод hasBytesAvailable
возвращает НЕТ, это не всегда означает, что NSInputStream
пустой. NSInputStream
в конце, только когда его статус NSStreamStatusAtEnd
, Например поток, который был построен из NSURL
является асинхронным и не имеет всех байтов сразу после открытия. Если это ваш случай, вы должны подписаться на NSInputStream
объявив некоторый класс как NSStreamDelegate
,