我有一个我想读为NSInputStream的NSData。这样,我就可以有一个一致的API来处理文件和内存中的数据。作为处理的一部分,我希望确保流以某些字节集开始(如果不是,我需要以不同的方式处理它)。如果文件类型错误,我希望避免将整个文件读取到内存中。
因此,我正在寻找一种方法来倒带流,或者一种方法来“窥视”即将到来的字节而不移动读取指针。如果这是一个用URL创建的NSInputStream,我可以在NSStreamFileCurrentOffsetKey上使用setProperty:forKey:,但奇怪的是,这在从NSData创建的NSInputStream上不起作用(即使你会认为这比文件版本更容易实现)。我也不能关闭和重新打开steam来重置输入指针(这是NSStream明确不允许的)。
我可以使用仅限NSStream的接口和-initWithContentsOfMappedFile重新解决这个问题,但如果可以的话,我宁愿继续使用NSData方法。
发布于 2010-02-13 12:12:00
我想我有些地方不明白。NSInputStream可以从三个位置获取数据:套接字、NSData对象或文件。您还没有说要使用套接字,这会留下另外两个作为数据源。此外,NSStream的文档指出,只有基于文件的流是可查找的。(NSStream,概述,第3段)
考虑到这一点,我认为NSData对象将是更好的选择。NSData对象将同时处理文件和字节(我认为这就是您所说的内存中的数据)。
但考虑到这一点,你会说你更喜欢使用streams。这里还有其他的考虑因素吗?
(编辑)对不起,我应该给你一个真实的答案。对于您所描述的问题,我的答案是使用NSData确实是正确的做法。
如果您更喜欢不同的答案,请提供更多详细信息。
发布于 2014-03-27 06:32:13
您确实可以在正在读取文件的NSInputStream中进行查找:
BOOL samplePositionAccepted =[NSNumber:NSNumber numberWithUnsignedLong:samplePosition forKey:NSStreamFileCurrentOffsetKey];
不过,我不确定这是否适用于NSData。(抱歉,我还没有得到足够的分数来写评论...)
(哦,对不起,没看到你已经试过了…)
https://stackoverflow.com/questions/2230461
复制相似问题