Ios 如何检查NSData是字符串还是图像

Ios 如何检查NSData是字符串还是图像,ios,Ios,如何检查NSData是字符串还是图像数据,我有接收服务器可以得到2种类型的数据是字符串和UIImage数据。如何检查数据是字符串还是图像数据。提前感谢 - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { switch (eventCode) { case NSStreamEventOpenCompleted: { NSLog(@"NSStreamEve

如何检查NSData是字符串还是图像数据,我有接收服务器可以得到2种类型的数据是字符串和UIImage数据。如何检查数据是字符串还是图像数据。提前感谢

- (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];          
            }
        }       
}

一个选项是尝试从数据创建
NSString
NSString initWithData:encoding:
)。如果失败,则尝试创建
UIImage
UIImage-imageWithData:
)。如果失败了,你两个都没有


另一个选项是检查数据长度。如果您知道您将获得的最长字符串的数据量永远不会超过您可能获得的最小图像的数据量,则此方法有效。

同意rmaddy。但在字符串之前检查图像,因为图像数据可能返回有效字符串

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

我会质疑一个可以发送字符串或图像而没有元数据来告诉你是哪个的设置

但是,如果您总是收到相同类型的图像,您可以检查前几个字节,看看它是否包含预期的“签名”。大多数图像格式在“签名”中或紧跟在“签名”之后都会包含一些“非法”Unicode字符,因此您可以确定它不是字符串

尝试转换数据并检测故障以确定其类型有点笨拙。

尝试以下方法:

UIImage *image= [UIImage imageWithData:imagedata];
if(image != nil){
   // correct image
} else{
   // incorrect image
}