我遇到NSInputStream问题。这是我的代码:
case NSStreamEventHasBytesAvailable:
printf("BYTE AVAILABLE\n");
int len = 0;
NSMutableData *data = [[NSMutableData alloc] init];
uint8_t buffer[32768];
if(stream == iStream)
{
printf("Receiving...\n");
len = [iStream read:buffer maxLength:32768];
[data appendBytes:buffer length:len];
}
[iStream close];
我尝试读取小数据,它在模拟器和真正的iPhone上运行良好。 如果我尝试读取大数据(超过4kB或5kB),真正的iPhone只能读取2736个字节并停止。
为什么?帮帮我吧! Merci d'avance!
答案 0 :(得分:2)
您的数据对象需要位于流处理程序的外部。通常的情况是,当大量数据进入时,您可以获得大量数据而不是一次性获取数据。只需保持向其附加数据,直到收到bytesRead == 0;然后,您可以关闭流并使用数据。
case NSStreamEventHasBytesAvailable: {
NSInteger bytesRead;
uint8_t buffer[32768];
// Pull some data off the network.
bytesRead = [self._networkStream read:buffer maxLength:sizeof(buffer)];
if (bytesRead == -1) {
[self _stopReceiveWithFailure];
} else if (bytesRead == 0) {
[self _stopReceiveWithSuccess];
} else {
[data appendBytes:buffer length:len];
}
答案 1 :(得分:0)
看起来你每次都在创建一个新的data
对象......也许你应该创建&保留它作为财产,并在你上面追加它。