2010-07-23 7 views
3

두 개의 서로 다른 입력 스트림 (하위 응용 프로그램의 stdin 및 stderr)에서 읽어 들여 하나의 결합 프레임으로 인쇄하려고합니다. 나는 전에 이것을 해 본 적이 없으며 모범 사례에 대해 궁금해하고 있습니다.Java 논 블로킹 읽기

두 개의 스레드를 생성하여 둘 다 입력 스트림에서 차단하도록 할 수 있습니다. 더 좋은 방법이 있습니까?

감사합니다.

+0

stdin과 stderr의 데이터를 구별 할 수 있어야합니까? 그렇지 않다면 ['ProcessBuilder.redirectErrorStream'] (http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/lang/ProcessBuilder.html#redirectErrorStream%28boolean)을 사용할 수 있습니다. % 29)를 사용하여 stderr을 stdin 스트림으로 리디렉션합니다. –

답변

-2

여러분의 최선의 전략은 java.nio 패키지의 클래스를 사용하는 것이라고 생각합니다. this example을 확인하십시오.

+0

불가능합니다. 그는 ProCess의 스트림을 사용하고 있습니다. NIO를 사용할 수는 없습니다. – EJP

1

두 개의 스트림을 결합하려고하면 출력/오류 문제가 발생할 수 있습니다.

아마도 프로세스 호출 및 출력/오류 캡처를 처리하기위한 알맞은 라이브러리 인 Apache commons-exec을 확인하십시오. 내부적으로는 사용자가 제안한대로 InputStream을 읽는 스레드를 포킹하는 것과 똑같이 수행합니다.

-1

두 스레드가있는 유일한 솔루션입니다.

+0

아니요. 위 참조. – EJP

관련 문제