试试这段代码 -
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”时它应该抛出异常,但事实并非如此。它改为返回“?”字符。这是一个错误还是这种预期的行为?
答案 0 :(得分:4)
documentation在这种情况下非常清楚:
StringReader.read()
返回:读取的字符,如果已到达流的末尾,则返回-1
答案 1 :(得分:2)
根据http://docs.oracle.com/javase/1.4.2/docs/api/java/io/StringReader.html#read%28%29 StringReader.Read()返回-1,如果已到达流的末尾。除非出现其他类型的错误,否则它不会抛出IOException。