我正在尝试从NSInputStream中读取超过300KB的大图像文件。但我只能获得高达300KB的空间。缺少其他数据。如果你知道的话,能帮帮我吗?我在等你的宝贵答案。 我在下面提到了我的代码: 从NSStreamEventsHasBytesAvailable:
调用此readAllData方法 - (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];
}
答案 0 :(得分:0)
当方法hasBytesAvailable
返回NO时,它并不总是意味着,NSInputStream
为空。 NSInputStream
仅在其状态为NSStreamStatusAtEnd
时才会结束。例如,从NSURL
构建的流是异步的,并且在打开后不会立即显示所有字节。如果是这种情况,您应该订阅NSInputStream
将某个类声明为NSStreamDelegate
。