http ライブラリを使用して、サイズが 200 MB のデータを取得しています。次に、データの各行が処理されます。メモリを節約するために、最初に 200 MB がすべてダウンロードされるのを待つのではなく、データがストリーミングされるときにデータを 1 行ずつ処理したいと考えています。
私が使用している http ライブラリは、オーバーライドできる OnCharReceived(CharBuffer buffer) のようなメソッドを公開しているため、データの各チャンクを受信時に実際に処理できます。
このデータを InputStream として公開したいと思います。私が最初に考えたのは、OnCharReceived() で PipedOutputStream に書き込み、スレッドで PipedInputStream から読み取る、PipedInputStream と PipedOutputStream のペアを使用することでした。ただし、これには、スレッドがデータの処理に取りかかるまで、書き込みスレッドが OnCharReceived でブロックする必要があるパイプの基になるバッファーがいっぱいになる可能性があるという問題があるようです。しかし、OnCharReceived でブロックすると、おそらく http ライブラリの IO スレッドでブロックされ、非常に悪い結果になります。
独自のカスタム実装を展開することなく、ここで解決する必要がある抽象的な問題を処理する Java クラスはありますか。大規模なソリューションの一部として使用できる BlockingQueue のようなものを知っています。しかし、簡単な解決策はありますか。
レガシ コードの理由から、InputStream として公開されたデータが本当に必要です。
編集:より正確に言うと、Apache http async ライブラリの次の例に基づいてコードを作成しています