1

このコードを試してください -

import java.io.StringReader;

public class StringReaderTest
{
    public static void main(String[] args) throws Exception
    {
        String sampleString = "abcdefg";
        StringReader reader = new StringReader(sampleString);

        for(int i=0; i<40; i++)
        {
            char c = (char) reader.read();
            System.out.print(c);
        }
    }
}

出力は -

abcdefg?????????????????????????????????

したがって、読者は実際には入力の最後を過ぎて読みます。「g」を超えて読み取ろうとしたときに例外をスローするべきだったという印象を受けましたが、そうではありませんでした。代わりに「?」を返しました。キャラクター。これはバグですか、それとも予想される動作ですか?

4

2 に答える 2

4

この場合、ドキュメントは非常に明確です。

StringReader.read()

戻り値:読み取られた文字、またはストリームの終わりに達した場合は-1

于 2012-06-18T22:35:05.713 に答える
2

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/StringReader.html#read%28%29によると、StringReader.Read()は、ストリームの終わりに-1が返される場合に-1を返します。到達しました。他の種類のエラーがない限り、IOExceptionはスローされません。

于 2012-06-18T22:34:39.523 に答える