1

私のApache HTTPクライアントは、HTTPストリーミング(チャンクデータの形式)を送信しているサーバーからデータを読み取っています。

データを取得するための入力ストリームと Buffered Reader があり、Buffered Data readLine メソッドを使用してこのデータを読み取ります。

InputStream inputStream = httpEntity.getContent();
br= new BufferedReader(new InputStreamReader(inputStream));

while ((line = br.readLine()) != null) 

サーバーから間違った応答があった場合は、接続を閉じたいです。

このために、接続を閉じるために時間間隔でタイマータスクを作成しています。応答が正しいかどうかを確認するために応答を受信するたびに解析しています。応答が正しい場合は、タイムタスクをリセットします。その場合に間違った応答を見つけた場合、タイマータスクをリセットしません (そして、以前に設定された時間までタイマータスクを実行させます)。

バッファリングされていない I/O が役立つかどうか知りたいですか? または、他のアプローチが必要ですか?

私が見る問題は、接続が開いているため、タイマータスクが接続を閉じることができないことです。inputStream.close または bufferReader.close はどちらも実行できません (無限に待機しているようです)

4

1 に答える 1

1

BufferReader.close()は、inputStream を閉じるだけで、次に を呼び出しますinputStream.close()。Java APIによると、InputStream.close()何もしません。ソケットを閉じる必要がありますhttpEntity

于 2010-11-03T13:44:42.070 に答える