我从服务器顺序获取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
,并阻塞直到它到达终点,继续为下一个字节块做同样的事情,就像上面的代码一样。
这种任务有更优选的解决方案吗?任何帮助将不胜感激。谢谢,
答案 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;