0

InputStreamとPrintStreamを提供する必要があるライブラリを使用しています。InputStreamを使用して処理用のデータを収集し、PrintStreamを使用して結果を提供します。私はこのライブラリの使用に固執しており、そのAPIを変更することはできません。

これには2つの問題があり、関連する解決策があると思います。

まず、InputStreamを介して読み取る必要のあるデータは事前​​に利用できません。代わりに、データはアプリケーションの別の部分によって動的に作成され、メソッド呼び出しを介して文字列としてコードに渡されます。私のコードの仕事は、ライブラリがこのデータを取得したときに提供されるInputStreamを介してこのデータを読み取れるようにすることです。

次に、PrintStreamに書き込まれる結果を取得し、それを文字列としてアプリケーションの別の部分に送信する必要があります。これは、データがPrintStreamに入れられた直後に発生する必要があります。

必要なのは、多かれ少なかれバッファのように動作する2つのストリームオブジェクトです。データを持っているときはいつでもデータを押し込めるInputStreamと、データがあるときはいつでもそのコンテンツを取得できるPrintStreamが必要です。これは私には少し厄介に思えますが、他にどのように行うかはわかりません。

この種の動作を可能にするものがすでに存在するのか、それとも私が説明した状況で機能する別の(より良い)解決策があるのか​​疑問に思います。私が思いつくことができる唯一のことは、この動作でストリームを実装しようとすることですが、それはすぐに複雑になる可能性があります(特に、データが利用可能になるまでInputStreamをブロックする必要があるため)。

何か案は?

編集:明確にするために、私はライブラリを書いていません。ライブラリにデータを読み取るためのInputStreamとデータを書き込むためのPrintStreamを提供することになっているコードを書いています。

4

1 に答える 1

0

両方のストリームが常に読み取り/書き込みを行う必要があるように見えるため、互いに独立した 2 つのスレッドが必要になります。このパターンは JMS に少し似ています。この場合、情報を「キュー」または「トピック」に送り、それが処理されるのを待ってから「出力」キュー/トピックに置きます。これにより追加の可動部分が発生する可能性がありますが、JMS キューに情報を配置する単純なクライアントを作成してから、メッセージを取得するだけのリスナーを作成し、それを常に入力ストリームに供給することができます。次に、出力ストリームから読み取るコードの別の部分で、必要なことを行います。お役に立てれば。

于 2012-11-30T01:55:53.977 に答える