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() 如果流的结尾有已达到。除非有其他类型的错误,否则它不会抛出 IOException。

于 2012-06-18T22:34:39.523 回答