首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于NSData对NSInputStream进行倒带

基于NSData对NSInputStream进行倒带
EN

Stack Overflow用户
提问于 2010-02-10 00:05:18
回答 2查看 2.7K关注 0票数 4

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

因此,我正在寻找一种方法来倒带流,或者一种方法来“窥视”即将到来的字节而不移动读取指针。如果这是一个用URL创建的NSInputStream,我可以在NSStreamFileCurrentOffsetKey上使用setProperty:forKey:,但奇怪的是,这在从NSData创建的NSInputStream上不起作用(即使你会认为这比文件版本更容易实现)。我也不能关闭和重新打开steam来重置输入指针(这是NSStream明确不允许的)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-13 12:12:00

我想我有些地方不明白。NSInputStream可以从三个位置获取数据:套接字、NSData对象或文件。您还没有说要使用套接字,这会留下另外两个作为数据源。此外,NSStream的文档指出,只有基于文件的流是可查找的。(NSStream,概述,第3段)

考虑到这一点,我认为NSData对象将是更好的选择。NSData对象将同时处理文件和字节(我认为这就是您所说的内存中的数据)。

但考虑到这一点,你会说你更喜欢使用streams。这里还有其他的考虑因素吗?

(编辑)对不起,我应该给你一个真实的答案。对于您所描述的问题,我的答案是使用NSData确实是正确的做法。

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

票数 1
EN

Stack Overflow用户

发布于 2014-03-27 06:32:13

您确实可以在正在读取文件的NSInputStream中进行查找:

BOOL samplePositionAccepted =[NSNumber:NSNumber numberWithUnsignedLong:samplePosition forKey:NSStreamFileCurrentOffsetKey];

不过,我不确定这是否适用于NSData。(抱歉,我还没有得到足够的分数来写评论...)

(哦,对不起,没看到你已经试过了…)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2230461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档