TEL:400-8793-956
当前位置:程序、服务器

在iOS中无法从NSInputstream读取大文件

提问者: 近期获赞: 浏览人数: 发布时间:2020-12-23 14:19:11

 问:我正在尝试从NSInputStream读取大于300KB的大型图像文件。但是我最多只能得到300KB。其他数据丢失。如果您知道的话,请您能帮助我。我正在等待您的宝贵答复。我在下面提到了我的代码:从NSStreamEventsHasBytesAvailable调用此readAllData方法:

 
-(void)readAllData {
如果(_readData == nil){
_readData = [[NSMutableData数据]保留];
}
而([[_session inputStream] hasBytesAvailable])
{
unsigned int bytesRead = 0;
bytesRead = [[_session inputStream] read:buf maxLength:@“ 1024”];
如果(bytesRead){
    NSMutableString * _string = [NSMutableString stringWithString:@“”];
    for(int i = 0; i <_readData.length; i ++){
        无符号字符_byte;
        [&#95; readData getBytes:&&#95;字节范围:NSMakeRange(i,1)];
        如果(_byte> = 32 && _byte <127){
            [_string appendFormat:@“%c”,_byte];
        }其他{
            [_string appendFormat:@“ [%d]”,_byte];
        }
    }
    [_readData appendBytes:(const void *)buf length:bytesRead];
}
}
  NSString * string = [NSString stringWithFormat:@“%d”,_readData.length];
 UIAlertView * sesView = [[UIAlertView alloc] initWithTitle:@“ readDatalength”
                                              讯息:字串
                                             委托人:自己
                                    cancelButtonTitle:nil otherButtonTitles:@“ OK”,nil];
 [sesView显示];
  }
 
 
答:我认为您应该调用-(NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len以获取最大数据长度,而不是一小块地获取它。如果使用“ max:read”方法指定长度,则将允许其他运行循环任务在下一个HasBytesAvailable事件传递之前运行。如果未读取所有可用数据,则将收到另一个HasBytesAvailable事件,该事件将在获取数据时出现问题。
上一篇: Servlet文件中的Java Web错误
下一篇: iOS + Cordova中的Facebook SDK