我想在一个为STDIN提供NSInputStream的类上提供一个访问器,它可能是数百兆字节(或者几千兆字节,但可能不太可能)。
当调用者获取此NSInputStream时,它应该能够从中读取而不必担心耗尽它包含的数据。换句话说,另一个代码块可能会请求NSInputStream,并希望能够从中读取它。
首先将所有数据复制到NSData对象中(我假设)会导致内存耗尽,我可以选择处理这个问题吗?返回的NSInputStream不必是同一个实例,它只需要提供相同的数据。
我现在能想到的最好的方法是将STDIN复制到临时文件,然后使用该文件返回NSInputStream实例。这几乎是处理它的唯一方法吗?如果我去临时文件路线,有什么我应该小心的吗?
编辑|我应该提一下,它不是实际上 STDIN,这是在一个多线程的FastCGI应用程序中,它是来自STDIN的FCGX_Request.in
流。
答案 0 :(得分:2)
从管道或套接字读取数据时,有三个选项:
这是完整的清单。除了短期或长期存储之外,没有其他地方可以记录它,因此您可以对所读取的数据执行的唯一其他操作就是不记录它。
再次获取数据的唯一方法是将其发送给您再发送一次。