在真正的iPhone上使用NSInputStream的问题

时间:2010-01-21 10:49:50

标签: iphone cocoa-touch

我遇到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!

2 个答案:

答案 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对象......也许你应该创建&保留它作为财产,并在你上面追加它。