菜鸟疑问:有关于Thinkinjava(1st,chap10)的一个例子:readLine&getLineNumber
Think in java(1st Edition) chap10
//String S2是读文件出来的
//: IOStreamDemo.java
try {
LineNumberInputStream li =
new LineNumberInputStream(
new StringBufferInputStream(s2));
DataInputStream in4 =
new DataInputStream(li);
PrintStream out1 =
new PrintStream(
new BufferedOutputStream(
new FileOutputStream(
"IODemo.out")));
while((s = in4.readLine()) != null )
out1.println(
"Line " + li.getLineNumber() + s);
out1.close(); // finalize() not reliable!
} catch(EOFException e) {
System.out.println(
"End of stream encountered");
}
//: NewIODemo.java
try {
LineNumberReader li =
new LineNumberReader(
new StringReader(s2));
BufferedReader in4 =
new BufferedReader(li);
PrintWriter out1 =
new PrintWriter(
new BufferedWriter(
new FileWriter("IODemo.out")));
/*
while((s = li.readLine()) != null)
out1.println("Line"+li.getLineNumber());
*/
while((s = in4.readLine()) != null )
out1.println(
"Line " + li.getLineNumber() + s);
out1.close();
} catch(EOFException e) {
System.out.println("End of stream");
}
Question:
为什么再NewIODemo.java里只要一被in4.readLine(),li.getLineNumber()就会到最后的行号(取出来全是相等的,最大行数),而用li.readLine()则不会如此,在IOStreamDemo.java里也不会如此。难道1.1以上in4.readLine()一个动作发生时实际上li已经被读完了缓冲???