【问题标题】:how to pipe data from NSOutputStream to NSInputStream in objective-c如何在objective-c中将数据从NSOutputStream传输到NSInputStream
【发布时间】:2015-01-30 19:03:21
【问题描述】:

我有 2 个库要集成并让它们相互通信。他们每个人都监听自己的输入和输出流。 库 1 将是库 2 的传输层。

案例 1: 库 1 在其输入流上接收数据我想在另一个虚拟输出流上写入数据,该输出流将通过管道传输到库 2 上的输入流。

案例 2: 库 2 想要发送一些数据,因此它将数据写入其输出流。这应该通过管道传送到一个虚拟输入流,从中读取数据并将其写入库 1 的输出流。

如何在 Objective-c 中为这些 NSStreams 创建管道?

提前感谢您的意见。

【问题讨论】:

  • 子类都带有包装类。一个截取数据并将其排队,另一个从队列中提取。
  • Sharath 运气好吗?我一直在寻求做类似的事情。
  • 我的情况是,两个库都独立处理流事件。我写了一个桥接类:我制作了桥接,这样当在库 1 上接收到数据时,它会获取 NSData 并使用 [NSInputStream inputStreamWithData:data] 创建一个输入流,并将其作为库 2 的输入流。要发送的数据我直接在库 2 输出流上发送数据,通过流事件在桥中收集它并写入库 1 输出流

标签: ios objective-c nsstream


【解决方案1】:

Gabriele Mondada 回答的 Swift 版本

    var readStream:Unmanaged<CFReadStream>?
    var writeStream:Unmanaged<CFWriteStream>?

    CFStreamCreateBoundPair(nil, &readStream, &writeStream, 4096)

    let inputStream:NSInputStream = readStream!.takeRetainedValue()
    let outputStream:NSOutputStream = writeStream!.takeRetainedValue()
【解决方案2】:

以下是创建简单管道的方法:

CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;

CFStreamCreateBoundPair(NULL, &readStream, &writeStream, 4096);

NSInputStream *inputStream = (__bridge_transfer NSInputStream *)readStream;
NSOutputStream *outputStream = (__bridge_transfer NSOutputStream *)writeStream;

您写入 outputStream 的内容将从 inputStream 中读取。

【讨论】:

  • 这太糟糕了。谁需要这样的一对?通常你有两个与某些东西相关联的流:文件、套接字、内存、xml 解析器,所以准备好的套接字应该通过管道连接在一起。
  • 我需要它。谢谢。另请参阅我对 Swift 版本的回答
  • @MarekR 说我有一些数据来源。我给它传递了一个OutputStream 来写信。我想将这些数据上传到服务器; HTTP 库采用InputStream。所以我需要的只是两个流之间的桥梁。
  • @Raphael 你错过了我的意思,你必须做很多样板代码,才能将一个流提供给另一个流。这对仅在一种情况下有用,用于在线程之间传递数据(每个流调度在不同的事件循环上),在其他情况下它完全没用。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
相关资源
最近更新 更多