代码之家  ›  专栏  ›  技术社区  ›  d11wtq Vadim Baryshev

多次处理可能较大的stdin数据

  •  0
  • d11wtq Vadim Baryshev  · 技术社区  · 15 年前

    我想在一个为stdin提供nsinputstream的类上提供一个访问器,该类可能有几百兆字节(或者千兆字节,尽管可能不太可能)。

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

    如果不首先将所有数据复制到一个nsdata对象中(我假定这会导致内存耗尽),我的处理方法是什么?返回的nsinputstream不必是同一个实例,它只需要提供相同的数据。

    我现在能想到的最好方法是将stdin复制到一个临时文件中,然后使用该文件返回nsinputstream实例。这几乎是唯一的处理方法吗?如果我走临时文件路线,有什么我应该小心的吗?

    编辑我应该提到,这不是 事实上 stdin,这是一个多线程fastcgi应用程序,它是 FCGX_Request.in 确实来自stdin的流。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Peter Hosey    15 年前

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

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

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

    另一种获得数据的方法是让发送给您的数据重新发送。