我认为,既然你已经将数据读入到流中,再次读取,是从上次的尾部开始读,自然什么也读不到。所以第二次打印就打印不出。
然后我查看LineNumberReader的api,发现有mark()方法可以标记该流中的当前位置,然后再用rest()方法重新将流定位到此点,还将相应地重新设置行号。
所以,可以在第一次打印之前mark()方法,打印完后,再rest()方法。
之后进行第二次打印就不成问题。
只是我不明白的是,即使不用mark(),reset()方法,禁用第一次打印的代码,第二次打印仍然打印不出行号。
为什么第二次打印打印不出行号?请指教。
代码如下- public class LineNumberReaderTest {
-
- public static void main(String[] args) throws IOException {
-
- FileReader fr=new FileReader("BufCopyText.java");
- LineNumberReader lnr=new LineNumberReader(fr);
-
-
- lnr.mark(1024);//标记该流中的当前位置。
-
-
- //打印代码的第一种方式:
- lnr.setLineNumber(10);
- String line=null;
- while((line=lnr.readLine())!=null){
-
- System.out.println(lnr.getLineNumber()+""+line);
- }
-
-
- System.out.println("-------------------------------");
- lnr.reset();//重新将流定位到之前标记的位置。
-
- //打印代码的第二种方式:
- lnr.setLineNumber(10);
- char[] buf=new char[1024];
- int num=0;
- while((num=lnr.read(buf))!=-1){
- System.out.println(new String(buf,0,num));
- }
-
- lnr.close();
- fr.close();
-
- }
- }
复制代码 |