2013-07-29 3 views
0

메커니즘 표시 및 재설정 작동 방법을 완전히 이해합니다. 그러나 다음 코드를 here에서 가져온 이유를 알고 싶습니다. br.mark (26)를 br .mark (0). 매개 변수는 마크보다 앞서 읽을 수있는 문자 수입니다. 인수로 0을 넣으면 아무 것도 읽지 않아야합니다. 대신 그것은 마치 내가 아무것도 바꿀 수없는 것처럼 작동합니다. 왜 그런 식으로 행동합니까?Mark()/Java의 BufferedReader 재설정

br = new BufferedReader(isr); 
    // reads and prints BufferedReader 
    System.out.println((char)br.read()); 
    System.out.println((char)br.read()); 
    System.out.println((char)br.read()); 
    // mark invoked at this position 
    br.mark(0); 


    System.out.println("mark() invoked"); 
    System.out.println((char)br.read()); 
    System.out.println((char)br.read()); 
    System.err.println("The Thing to be said:"+(char)br.read()); 

    // reset() repositioned the stream to the mark 
    br.reset(); 
    System.out.println("reset() invoked"); 
    System.out.println((char)br.read()); 
    System.out.println((char)br.read()); 
    System.out.println((char)br.read()); 
+0

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#mark(int) -> * 실패 할 수있다. 그럴 것이라고 보장 할 수는 없습니다. 나는 자바의 "어, 그럴지도 모르겠다"는 것을 신경 쓰지 않지만 꽤 일반적이다. –

+0

@BrianRoach 스트림이 재설정되면, 설정 한 한계를 극복 한 마크 이후에 읽혀지는 문자의 양입니다. mark()를 호출하고 다음 read() 호출에서 아무것도 반환하지 않을 때까지 버퍼를 재설정해야합니다. 그러나 그것은 실패합니다. 그래서 앞으로 캐릭터의 한계를 설정하지 못합니까? 그러면 그게 무엇입니까? – Rollerball

답변

1

엄격한 제한 사항이 아니기 때문에 이는 단지 조언 일뿐입니다. Javadoc의 상태 등 :

이 한계까지 또는 수도 실패를 넘어 문자를 읽은 후 스트림을 재설정하려고 시도.

(강조 광산)

+0

스트림이 재설정되면, 설정 한 한계를 극복 한 마크 이후에 읽혀지는 문자의 양입니다. mark()를 호출하고 다음 read() 호출에서 아무것도 반환하지 않을 때까지 버퍼를 재설정해야합니다. 그러나 그것은 실패합니다. 그래서 앞으로 캐릭터의 한계를 설정하지 못합니까? 그러면 그게 무엇입니까? – Rollerball

+0

@Rollerball - 예, 마크/리셋 작동 방식을 이해합니다. 문서에 설명되어 있듯이 _ 실패 할 수도 있습니다. 어떤 경우에는 실패 할 것이고 어떤 경우에는 실패 할 것입니다. BufferedReader의 경우, 현재 버퍼 내에 머물러있는 한 실패하지 않습니다. 기본 스트림에서 새 버퍼를로드해야하는 경우에만 미리 읽기 플래그를 확인합니다. BufferedReader (또는 다른 Reader)에게 추적해야 할 "오래된"데이터 양을 알려주는 목적으로 사용됩니다. – jtahlborn