2015-01-27 1 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로는 첫 번째 함수에서 중단 된 부분부터 시작입니다." '- 이것은 매우 쉽게 테스트 할 수 있으며, 여러분이 그렇게 할 것을 제안합니다 : 작은 프로그램을 작성하고 ** 테스트 **를하십시오. –

+0

당신이 그것을 시도했을 때 어떤 일이 일어 났습니까? beleiving하기 위해 당신이 가지고있는 이유는 마술처럼 파일을 되감고 다시 다른 방법으로 전달했기 때문입니다. – EJP

답변

0

제공된 두 예제는 모두 reada에서 중단 된 상태로 계속 읽습니다. 처음부터 다시 시작하려면 close()에 전화를 걸어 다시 초기화해야한다고 생각합니다. 또는 다른 BufferedReader을 사용하십시오. 나는 다른 방법이있을 것이라고 확신하지만 그것이 마음에 온다.

+0

'다시 초기화하십시오'*는 * '다른'BufferedReader' '를 의미합니다. 이것들은 두 가지 다른 해결책이 아닙니다. – EJP

-1

을, BufferedReader가 닫혀 있지 않은 경우는 마지막 곳에 떨어져 왼쪽에서 네, 그것은 읽습니다. 이들은 동일한 프로세스 컨텍스트에 있고 동일한 파일 핸들러를 사용하므로 파일 핸들러와 동일한 "현재 오프셋"을 사용합니다.

+0

그것에 대해 '둘 다'는 없습니다. 여기에는 하나의'BufferedReader' 만 있습니다. – EJP

관련 문제