2014-12-01 3 views
0

Как проверить NSData - это данные строки или изображения, у меня есть сервер, который может получить 2 типа данных - это строка и данные UIImage. Как проверить данные - это строковые или графические данные. Спасибо в продвинутом.Как проверить NSData является строкой или изображением

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode 
{ 
    switch (eventCode) { 
     case NSStreamEventOpenCompleted: { 

      NSLog(@"NSStreamEventOpenCompleted"); 
     } break; 
     case NSStreamEventHasBytesAvailable: { 
      if(!self.data) { 
       self.data = [[NSMutableData alloc] init]; 
      } 
      while (self.networkStream.hasBytesAvailable) { 
       uint8_t buf[1024]; 

       NSInteger len = 0; 
       len = [self.networkStream read:buf maxLength:1024]; 
       if(len>0) { 
        [self.data appendBytes:(const void *)buf length:len]; 
        // bytesRead is an instance variable of type NSNumber. 
        self.bytesRead += len; 
       }else{  
       } 
      } 

      // Event when read input stream done 
      if (!self.networkStream.hasBytesAvailable) { 

        [self _didReceiveDataString:self.data];   
      } 
     }  
} 

ответ

0

Одним из вариантов было бы попытаться создать NSString из данных (NSString initWithData:encoding:). Если это не удается, попробуйте создать UIImage (UIImage imageWithData:). Если это не удается, у вас их нет.

Другим вариантом является проверка длины данных. Это работает, если вы знаете, что самая длинная строка, которую вы получите, никогда не будет больше данных, чем самое маленькое изображение, которое вы можете получить.

1

Согласовано с rmaddy. Но проверьте изображение перед строкой, потому что данные изображения могут возвращать допустимую строку.

if ([UIImage imageWithData:data]) 
{ 
    // get image 
}else if ([[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]) 
{ 
    // get string   
} 
1

Я бы поставил под вопрос установку, которая могла бы отправлять строку или изображение без метаданных, чтобы сообщить вам, какой.

Но если вы всегда получаете один и тот же тип изображения, вы можете проверить первые несколько байтов, чтобы увидеть, содержит ли он ожидаемую «подпись». И большинство форматов изображений будут содержать некоторые «незаконные» символы Unicode в или сразу после «подписи», поэтому вы можете точно определить, что это не строка.

Это неловко, чтобы попытаться преобразовать данные & обнаружить отказ, чтобы определить его тип.

0

Попробуйте это:

UIImage *image= [UIImage imageWithData:imagedata]; 
if(image != nil){ 
    // correct image 
} else{ 
    // incorrect image 
} 
Смежные вопросы