2015-01-27 87 views
-2

对不起,嗯..深奥的标题,但这是我的问题? 如果我有一个BufferedReader函数内,我可以逐行阅读,每次它读取一行,它读取上一次读取的行后,但考虑这一点:BufferedReader记忆功能之间的线

我有一个函数初始化BufferedReader,从文件中读取几行文件,然后将BufferedReader传递到另一个函数,然后从另一个函数中读取几行文件。假设文件包含10行,第一个函数读取6行,第二个函数读取4.

问题是什么时候BufferedReader作为参数传递给第二个函数,它会从头开始读取文件或者它将从第一个函数中的BufferedReader中止位置开始。

BufferedReader br; //initialized somewhere 
public void reada(){ 
    for(int I=0; I<6; I++){ 
     br.readLine(); 
    } 
    //readb(br); Will calling this(and not the following line) read the first 4 or last 4 lines in a 10 line file? 
    //readc(); Will calling this(and not the above line) read the first 4 or last 4 lines in the same file? 
} 

public void readb(BufferedReader reader){ 
    for(int j=0; j<4; j++){ 
     reader.readLine(); 
    } 
} 

public void readc(){ 
    for(int k=0; k<4; k++){ 
     br.readLine(); 
    } 
} 
+0

'“问题是什么时候BufferedReader作为参数传递给第二个函数,它会从文件的开始处开始读取文件,还是从BufferedReader在第一个函数中停止的地方开始。 ' - 这是很容易测试的,我建议你这样做:写一个小程序和**测试**它。 – 2015-01-27 01:30:26

+0

当你尝试过时发生了什么?你有什么理由放弃它会神奇地倒带文件,并开始只是因为你把它传递给另一种方法? – EJP 2015-01-27 03:18:42

回答

0

这两个提供的示例将继续读取从reada停止的位置。我相信,为了从头开始重新启动,必须​​先调用close()然后再次初始化它。或者只是使用另一个BufferedReader。我相信还有其他的方式,但是这是想到的。

+0

'再次初始化'*表示*'另一个'BufferedReader''。这不是两种不同的解决方案。 – EJP 2015-01-27 03:20:28

-1

是的,如果BufferedReader没有关闭,它会从最后一次关闭的地方读取。因为它们处于相同的进程上下文中并使用相同的文件处理程序,所以它们使用文件处理程序的相同“当前偏移量”。

+0

关于它没有“双方”。这里只有一个'BufferedReader'。 – EJP 2015-01-27 03:17:12