0

BufferedReaderをラップしているから読んでいInputStreamReaderます。ストリームは、次の URL から取得されます。myURL.openStream();

ストリームの一部 ( と の間の文字) を読み取り、テキスト ファイルに保存しようとしstartPosendPosStringます。

    char[] buffer = new char[endPos-startPos];
    reader.skip(startPos);
    int i = 0;
    while(i < (endPos-startPos)){
        buffer[i] = (char) reader.read();
        i++;
    }

上記のコードは機能しますが、かなり遅いようです。私はread(char[], int, int)代わりにメソッドを使用しようとしています - Java の人々はそれをより早く実装したと思います!

ただし、目的の文字を文字列に追加する途中で終了し、半分完全な文字配列が残ります。

Javadoc によると、EOF に達した場合、または「基になるストリームの ready メソッドが false を返し、それ以上の入力要求がブロックされることを示している」場合にのみこれを行います。誰がこれが何を意味するのか教えてもらえますか? そして、文字を 1 つずつ正しく読み取ると、なぜそれが起こるのでしょうか? (EOF にすることはできません!)

4

1 に答える 1

0

データの到着が遅いため、遅いです。受信コードでそれについてできることは何もありません。read(char[] ...)最初の読み取りがブロックされた後にその数のバイトだけが到着したため、早期に返されます。特定の文字数を読みたい場合は、ループする必要がありread()ますread(char[], ...)。そのまま、BufferedReaderエラー、バッファリング、どちらを呼び出しても違いはありません。

于 2012-10-24T03:23:26.487 に答える