【问题标题】:NSInputStream working with with local file, not with file pulled down from serverNSInputStream 使用本地文件,而不是从服务器拉下的文件
【发布时间】:2012-07-21 05:02:40
【问题描述】:

大家好,我正在从网络服务器上下载一个 yaml 文件。我的 NSInputStream 非常适合本地 yaml 文件(使用 file://filename.yaml url 方案)

下面是相关代码sn-p:

NSInputStream * stream = [[NSInputStream alloc] initWithURL:yamlURL];

其中 yaml url 类似于 http://myip:8000/assets/test.yaml 在浏览器中打开只会导致文件下载...

有什么想法吗?

【问题讨论】:

  • 我遇到了同样的问题。 initWithURLinputStreamWithURL 都返回 nil,即使我可以使用 NSURLConnection 使用相同的 URL 成功下载有问题的文件。让initWithURL 工作成功了吗?
  • 在下面查看我的评论...基本上我通过在使用文件之前下载到 NSData 解决了这个问题
  • 是的,我对此很熟悉。 NSData 不适用于大(数百 MB)文件。显然,我可以下载到本地文件(我已经有一个下载器类,可以避免在任何给定时间将整个内容加载到 NSData 中),但即使这样也非常低效(我必须等待大喇叭下载完成在我开始使用它之前)当我想要基于网络的流媒体解决方案时。我即将继承 NSInputStream 来做我需要的事情,但这似乎很愚蠢......inputStreamWithURL 应该可以完成这项工作。我想在自己动手之前看看能不能让它发挥作用。

标签: iphone ios yaml nsinputstream


【解决方案1】:

我为时已晚,但我刚刚解决了这个确切的问题,所以这里是:

根据文档,

The NSStream class does not support connecting to a remote host on iOS.

这听起来很愚蠢,initWithURL 只适用于本地文件。但是有一个简单的解决方法...

可以在这里找到来自苹果的完整解释和代码示例: https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/Streams/Articles/NetworkStreams.html#//apple_ref/doc/uid/20002277-BCIDFCDI

【讨论】:

    【解决方案2】:

    在 initWithURL 之后,您对 *stream 有什么操作吗?

    如果您从使用本地文件初始化的 InputStream 中获取内容,则需要创建一个 NSOutputStream 来获取 InputStream 并将其重定向到 Safari。所以我不认为只用 url 调用 initWithURL: 会告诉你很多,但是在 safari 中打开 http:// url 的调用会尝试确定内容类型并尝试输出文件。但如果它是一个多部分的 mime yaml 文件,我认为 safari 将无法显示内容。

    【讨论】:

    • 因此,为了解决 pareshkumar 所说的许多 nsinput 流的“if”,我实际上现在正在从 url(或本地文件)下载到 NSData,然后用这些数据初始化输入流。更加稳定和易于使用。
    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2018-06-18
    • 2013-07-24
    • 2015-09-29
    • 2014-08-28
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多