2014-09-18 2 views
0

필자는 매개 변수로 스캐너를 사용하는 방법을 사용하고 있으므로 두 번 사용할 수 있도록 복사하고 싶습니다. 그게 가능하니?스캐너 사본을 만들 수 있습니까?

죄송합니다.이 웹 사이트를 처음 사용합니다. 이 모든 자바 웹 사이트입니까? 왜냐하면 내가 사용하고있는 것이기 때문이다.

+0

두 번째 질문에 답하려면 모든 Java 웹 사이트가 아닙니다. 하지만 자바에 대해 알고있는 사람들에게 다가 가기 위해서는 "java"로 게시물에 태그를 답니다. 질문에 적용되는 것이 있으면 java를 아는 사람들이 쉽게 찾을 수 있습니다. –

답변

0

두 번 사용하려는 경우 두 스캐너 중 하나를 처음으로 처리 할 때 두 스캐너를 초기화하거나 동일한 스캐너를 초기화해야합니다. 이 질문에 대한 전반적인 대답은 처음으로 스트림을 처리 할 때 스캐너를 다시 초기화한다는 것입니다.

0

"... 두 번 사용할 수 있습니다."라는 말의 의미가 명확하지 않습니다.

Scanner 개체에 대해 두 번 이상 호출하려는 경우가 있습니다. 분명히, 당신은 Scanner을 복사 할 필요가 없습니다.

다음 해석은 Scanner을 사용하여 동일한 입력 스트림에서 동일한 토큰 스트림을 두 번 읽는 것입니다. 그것은 작동하지 않습니다. 스캐너는 기본 입력 스트림을 독점적으로 사용한다고 가정하고 은 스트림의 문자를 사용합니다. 따라서 두 개의 스캐너가있는 하나의 입력 스트림이있는 경우 스캐너 중 하나에서 일부 입력 문자를 가져오고 나머지 하나는 나머지를 가져옵니다. (그리고 어떤 스캐너가 어떤 문자를 쉽게 예측할 수 없게되는지 알 수 있습니다.)

몇 가지 방법이 있습니다. 데이터 소스가 파일 (응용 프로그램이 열립니다), 당신은 두 번을 열고 두 개의 독립적 인 Scanner의를 만들 수 있습니다 경우

  • - 예를 들면.

  • 전체 스트림을 String 또는 StringBuffer 또는 문자 배열로 메모리로 읽어 들인 다음 버퍼링 된 데이터를 읽는 두 개의 입력 스트림을 만들고 스트림에 대해 Scanner을 사용할 수 있습니다.

  • "tee stream"(예 : http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/TeeInputStream.html) 또는 유사한 기능을 사용하여 입력 사본을 별도의 출력 스트림에 저장 한 다음 입력 스트림에 기록 된 데이터를 별도의 스캐너로 보낼 수 있습니다.

최종 해석은 동일한 스트림에서 토큰을 반환하는 두 개의 스캐너가 필요하다는 것입니다. 그렇게하고 싶다면 하나의 스캐너를 사용하고 그것을 필요로하는 두 곳으로 전달하는 것이 좋습니다. 동일한 입력 스트림에서 두 개의 스캐너를 사용하려고하면 위에서 언급 한 문제가 발생할 수 있습니다.

관련 문제