0

I am trying to read large Image file more than 300KB from NSInputStream. But i'm getting only upto 300KB. Other data are missing. Could you please help me if you know. i'm waiting for your valuable answer. I mentioned my code below : Call this readAllData method from 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];

}

vishnu
  • 13
  • 2

1 Answers1

0

When method hasBytesAvailable returns NO it doesn't always mean, that NSInputStream is empty. NSInputStream is at end only when its status is NSStreamStatusAtEnd. For example a stream which was been built from NSURL is asynchronous and it has no all bytes immediately after opening. If that is your case you should subscribe to NSInputStream declaring some class as NSStreamDelegate.

Pavel Osipov
  • 2,067
  • 1
  • 19
  • 27