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已经被读完了缓冲???