2012-04-20 3 views
1

다소 모호한 질문입니다, 미리 사과드립니다.PushbackReader 동급

저는 Java로 건물 파서 (Building Parsers with Java)의 도움으로 작은 파서의 토큰 화 부분을 만들고 있습니다. 그것은 PushbackReader를 사용하고 그 안에 포함 된 String은 먼저 주어진 문자열의 첫 번째 문자를 감지 한 다음 PushbackReader를 적절한 상태로 보냅니다. 그런 다음 상태가 String을 포함하는 별도의 객체로 토큰을 만듭니다.

스트림에 다른 사용 문자가없는 경우에만 PushbackReader가 사용 된 것으로 보입니다. 그런 다음 마지막 문자를 읽지 않습니다.

CharBuffer의 추가로 동일한 작업을 수행 할 수 있습니까? 버퍼를 미리 정의 할 필요가없는 것이 좋습니다. 내가 보는 것을 바탕으로

+0

을 가지고 그들을 전달하는 데 샘플 코드를 보셨습니까? http://oozinoz.xp123.com/bpwj.htm –

+0

예. 그것이 내가 원래 가지고있는 곳입니다. 나는 내가하려고하는 것이 본질적으로 어리석은 것이라고 생각한다. – JGrey

+0

나는 그것이 자바의 일부라는 것을 깨닫지 못했다. 참조 : http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PushbackReader.html. 왜 자바에 이미 존재하는 것을 재창조하려고합니까? –

답변

1

, 그는 두 가지 이유 PushbackReader를 선택 :

  1. 그는 개별 문자를 처리 할 수있는 리더가 필요합니다.
  2. 그는 토큰화할 때 한 문자 이상을보고 나서 현재의 문자가 토큰의 일부인지 결정해야하기 때문에 스트림에 백업해야했습니다.

예를 들어 WhitespaceState.nextToken 메서드에서 그는 공백 문자를 건너 뜁니다. 그는 인물을 끌어내어 본다. 공백 문자 인 경우 그는 다음 문자를 가져옵니다. 마침내 그가 공백이 아닌 문자를 가져 오면, 그 문자를 다시 스트림에 넣으므로 스트림을 보는 다음 메서드는 올바른 문자를 볼 것입니다. 당신이) (읽기, 단지 두 가지 방법이 더 간단 뭔가 읽지 않은(), 당신은 그렇게함으로써 당신은 아마 전체에서

  1. 읽기 될 것이라고 기억할 필요가 그것을 대체 할 수 있지만

    입력 한 다음 입력을 처리합니다. 그래서 큰 파일을 가지고 있다면 그것을 저장하기 위해 메모리를 먹을 것입니다.

  2. 입력을 한 번 스트림으로 읽지 만 읽지 않은()에서 char을 저장하고 별도의 구조로 전달합니다. PushbackReader와

, 그는 읽고 한 번 입력을 통해 처리, 그는 전체 입력 버퍼하지 않으며, 그는 읽지 않은() 문자를 저장하고 주변에 별도로

+0

의미가 있습니다. 고마워. – JGrey

관련 문제