3

たとえば2秒より長くかかる場合、JavaのreadLine()メソッドをスキップする簡単な方法はありますか?

これが私がこの質問をしている文脈です:

public void run()
{
    boolean looping = true;
    while(looping) {
        for(int x = 0; x<clientList.size(); x++) {
            try {
                Comm s = clientList.get(x);
                String str = s.recieve();
                // code that does something based on the string in the line above
            }
            // other stuff like catch methods
        }
    }
}

Commは私が作成したクラスであり、「in」と呼ばれるBufferedReaderを含むreceiveメソッドは次のとおりです。

public String recieve()
{
    try { if(active) return in.readLine(); }
    catch(Exception e) { System.out.println("Comm Error 2: "+e); }
    return "";
}

プログラムが停止し、入力ストリームが何かを読み取るのを待ってから続行することに気づきました。プログラムがループし続ける必要があるので、これは悪いことです(ループすると、他のすべてのクライアントに行き、入力を求めます)。読み取るものがない場合にreadLine()プロセスをスキップする方法はありますか?

また、私はこれをうまく説明していないと確信しているので、混乱している場合は質問してください。

4

1 に答える 1

4

タイムアウトだけではお勧めできません。クライアントごとに1つのスレッドを使用します(または非同期I / Oを使用しますが、高性能アプリケーションを構築している場合を除いて、それは不必要に複雑です)。

タイムアウト自体については、カプセル化されたストリームで実行する必要があります。たとえば、JavaのURLConnectionに基づいてBufferedReaderに対してタイムアウトを設定するにはどうすればよいですか?を参照してください。

于 2010-05-18T22:43:56.847 に答える