objective-c - 多次处理潜在的大型 STDIN 数据

标签 objective-c cocoa stdin nsinputstream

我想在一个类上提供一个访问器,该类为 STDIN 提供 NSInputStream,这可能是几百兆字节(或千兆字节,尽管可能性不大)的数据。

当调用者获取此 NSInputStream 时,它应该能够从中读取数据,而不必担心耗尽其中包含的数据。换句话说,另一个代码块可能会请求 NSInputStream 并期望能够从中读取。

如果不首先将所有数据复制到 NSData 对象中(我认为这会导致内存耗尽),我有什么选择来处理这个问题?返回的 NSInputStream 不必是同一个实例,它只需要提供相同的数据即可。

我现在能想到的最好办法是将 STDIN 复制到临时文件,然后使用该文件返回 NSInputStream 实例。这几乎是处理它的唯一方法吗?如果我走临时文件路线,有什么需要注意的吗?

编辑|我应该提到,它实际上不是 STDIN,这是在多线程 FastCGI 应用程序中,它是来自 STDIN 的 FCGX_Request.in 流。

最佳答案

从管道或套接字读取数据时,您有三个选择:

  • 处理它然后忘记它。
  • 将其添加到内存中的完整记录中,并在执行此操作之前或之后对其进行处理。
  • 将其添加到完整的文件中,并在执行此操作之前或之后对其进行处理。

这是完整的列表。除了短期或长期存储之外,没有其他地方可以记录它,因此您对读取的数据唯一能做的就是根本不记录它。

再次获取数据的唯一其他方法是无论发送给您的数据如何再次发送。

关于objective-c - 多次处理潜在的大型 STDIN 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933671/

相关文章:

iphone - MPMoviePlayerController 几秒钟后停止播放

macos - NSSharingService 共享子菜单

swift - 使 BlockOperation 失败,以便其他依赖项不执行

C 和 Erlang : Erlang Port example

iphone - 可以使用空值初始化NSArray吗?

iOS 如何为给定服务器重置 NSURLCredential 或让我的应用程序忘记它曾经与该服务器交谈过?

iphone - 了解 iPhone 崩溃日志

objective-c - NSTextFieldCell 或仅带有垂直文本(和彩色着色)的 NSCell

php - 从 STDIN 逐行读取

python - 将 StdIn 重定向到 python manage.py shell 时从 StdIn 读取输入