2012-01-03 5 views
0

ずにJavaでBufferedReaderので読むことができます。私がネットワーク上で例えばネットワーク上でアクセスできるようにするには、リクエストをコーディングし、EventListenerがキックするのを待っていました。は、なぜ私はActionScriptを使用して快適にしていたEventListener

現時点では、次のアンドロイドコードでJavaチュートリアルを行っています(try /キャッチ):

url = new URL("http://www.google.com"); 
URLConnection conn = url.openConnection(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()); 
String line = ''; 
while((line = reader.readLine()) != null) { 
    // do something with the line 
} 

これはどのように動作しますか。

なぜ必要な一切のEventListenerがありませんか? URLが要求された後、コードがimmidiately進む中でキックをしながら、構築したときに、URLが取得されていないことがあります。

ちょうどその間に一時停止のアプリですか?はい、イベントリスナーでこれを実現することは可能でしょうか?

は助けてくれてありがとう!

+1

はい、同期の手順はここにあります。つまり、メソッド呼び出しがまだ返っていない間も実行は継続されません。 –

+0

いいえ、接続が失敗した(経過した)時間を追加できますか? – shredding

+0

[setConnectTimeout](http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setConnectTimeout(int))を参照してください。 および[setReadTimeout](http: /docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setReadTimeout(int)) –

答えて

0

はちょうどその間に一時停止のアプリですか?

はい。通常のJava IOクラスは同期しています。 readLine()への呼び出しは、行を返すか、例外があるまでブロックされます。

「はい」の場合は、イベントリスナーでこれを実現できますか?

はい、classes in the java.nio packageを使用します。しかし、やや低レベルのインターフェイスでのみ。

一般に、Javaアプリケーションは、そのような状況に対処するためにイベントqeueuesの代わりにマルチスレッドを使用します。

0

何が起こるかというとBufferedReaderは、(あなたがBufferedReaderreader.readLine()またはその他のreadXXXメソッドを呼び出したときに)データを提供するように要求され、そのデータのためのInputStreamの基礎となるすべての時間を要求するということです。 (接続は、例えば、閉鎖された場合)が可能かどうかであるかもしれない - それは、このように、その時点でそれを提供するために、InputStreamの責任です。

この場合、URLConnectionによって提供されるInputStreamは、以前の読み取り要求でキャッシュされたデータを返すか、またはそれが指しているURLからさらに多くのデータを要求します。

このように、BufferedReaderreadLineを呼び出すまで、実際のデータは読み込まれません。サーバーへの接続を開いたばかりです。

関連する問題