将字节附加到NSInputStream以便稍后读取

时间:2014-05-16 04:51:19

标签: ios cocoa nsstream

我从服务器顺序获取NSData块,超过约。每次4096个字节,按顺序排列。每个收到的块的大小可能不同。

我想做的是将所有这些字节附加到某处,同时从数据的开头开始读取,顺序一次512字节< / strong>最大。

在搜索时我已经了解了如何使用NSInputStream,这是代码段:

        uint8_t bytes[512];
        UInt32 length;

        NSInputStream *stream = [[NSInputStream alloc] initWithData:aData];
        [stream open];
        while (((length = [stream read:bytes maxLength:512]) > 0)) {
            if ([self.inputStreamer isKindOfClass:[PLAudioInputStreamerNoOpenClose class]]) {
                [self.inputStreamer hasData:bytes length:length];
            }
        }

虽然这只是有效,但初始化后的NSInputStream似乎不允许在初始化后添加额外的字节,因此我能想到的唯一方法是为每个数据块初始化NSInputStreams ,并阻塞直到它到达终点,继续为下一个字节块做同样的事情,就像上面的代码一样。

这种任务有更优选的解决方案吗?任何帮助将不胜感激。谢谢,

1 个答案:

答案 0 :(得分:1)

您需要一个“读写”流。 NSInputStream是只读的,NSOutputStream是只写的。

如果我是你,我只使用一个NSMutableData和一个int变量作为'当前阅读位置'。

NSMutableData* myData = [[NSMutableData alloc] init];
NSInteger myPos = 0;

[myData appendData:..];
...
// need to check the range (myPos ~ [myData length])
NSData* nextBlockToRead = [NSData dataWithBytesNoCopy:((char*)[myData bytes] + myPos) length:512];
myPos += 512;