问:我正在尝试从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事件,该事件将在获取数据时出现问题。