cocoa – 基于NSData重绕NSInputStream

我有一个NSData,我想读作NSInputStream.这样我就可以拥有一致的API来处理文件和内存中的数据.作为处理的一部分,我想确保流以一些字节集开头(如果没有,我需要以不同的方式处理它).如果它的类型错误,我想避免将整个文件读入内存.

所以我正在寻找一种回放流的方法,或者在不移动读指针的情况下“查看”​​即将到来的字节.如果这是一个用URL创建的NSInputStream,我可以在NSStreamFileCurrentOffsetKey上使用setProperty:forKey:但奇怪的是这对从NSData创建的NSInputStream不起作用(即使您认为这比文件版本更容易实现) ).我无法关闭并重新打开蒸汽来重置输入指针(这是NSStream明确不允许的).

我可以使用NSData-only接口和-initWithContentsOfMappedFile重新解决这个问题,但如果可以的话,我宁愿继续使用NSStream方法.

最佳答案 我想我在这里听不懂. NSInputStream可以从三个位置获取数据:套接字,NSData对象或文件.您没有说过要使用套接字,而另外两个套接字是您的数据源.此外,NSStream的文档说只有基于文件的流是可以搜索的. (NSStream,概述,第3段)

鉴于此,我认为NSData对象将是更好的选择. NSData对象将处理文件和字节(我认为你的意思是内存中的数据).

但你考虑到这一点,并说你更喜欢坚持使用溪流.这里有其他考虑吗?

(编辑)抱歉,我应该把它作为一个真正的答案.我对你所描述的问题的回答是,使用NSData确实是正确的做法.

如果您更喜欢不同的答案,请提供更多详细信息.

点赞