0

STDINにNSInputStreamを提供するクラスにアクセサーを提供したいと思います。これは、数百メガバイト(または、おそらくありそうもないですが、ギガバイト)のデータである可能性があります。

呼び出し元がこのNSInputStreamを取得すると、含まれているデータを使い果たすことを心配せずに、そこから読み取ることができるはずです。言い換えると、コードの別のブロックがNSInputStreamを要求し、そこから読み取ることができることを期待する場合があります。

最初にすべてのデータをNSDataオブジェクトにコピーしないと(私は)メモリの枯渇を引き起こすと思いますが、これを処理するための私のオプションは何ですか?返されるNSInputStreamは同じインスタンスである必要はなく、単に同じデータを提供する必要があります。

私が今思いつくことができる最善の方法は、STDINを一時ファイルにコピーしてから、そのファイルを使用してNSInputStreamインスタンスを返すことです。これはそれを処理するためのほとんど唯一の方法ですか?一時ファイルルートを使用する場合に注意すべき点はありますか?

編集| 言及する必要がありますが、これは実際にはSTDINではなく、マルチスレッドFastCGIアプリケーションにあり、FCGX_Request.inSTDINからのストリームです。

4

1 に答える 1

2

パイプまたはソケットからデータを読み取る場合、次の3つのオプションがあります。

  • それを処理し、それを忘れてください。
  • それをメモリ内の完全なレコードに追加し、その前または後に処理します。
  • それを完全なファイルに追加し、その前または後に処理します。

これが完全なリストです。それを記録する場所は他にありませんが、短期または長期のストレージです。したがって、読み取ったデータを使用して実行できる他の唯一のことは、データをまったく記録しないことです。

データを再度取得する他の唯一の方法は、データを送信したものが何であれ、データを再送信することです。

于 2010-05-29T05:51:12.240 に答える