2013-01-21 3 views
0

:이 모듈의 목적은 주 사이의 통신을 용이하게하기 위해의 OutputStream과의 InputStream 나는 다음과 같은 문제가있다

public void start(InputStream input, OutputStream output, 
     InputStream error, PipeListener<T> listener) 

입니다 :

나는 다음과 같은 API와 모듈을 제공하고있다 시스템 및 외부 프로세스 (이 경우, Process의 인스턴스).

내가하려는 것은 사실 "스레드 프로세스"를 구현하는 것입니다.이 스레드는 실제로 스레드 인스턴스이지만 자체 입력, 출력 및 오류 스트림이 있습니다. 여기서 중요한 것은 자신이, 예를 들어, 나는 모든 의도와 목적을 위해

((Process)realProcess).getInputStream(). 

기능적으로 동일하게

((MockProcess)mockProcess).getInputStream() 

에 의해 반환 된 스트림 구현을 원하는 스트림의 성격, 그들은해야 완전히 상호 교환 가능.

이것을 달성하기 위해 어느 InputStream 및 OutputStream 구현을 사용해야합니까? 내가 찾은 유일한 제안은 파이프로 연결된 스트림을 사용하는 것입니다.하지만이 방법이 가장 좋습니다.

+0

이것은 통합 테스트의 일반적인 질문입니다. 해당 주제에 대한 일부 검색이 도움이 될 수 있습니다. –

답변

-1

유닉스에서 프로세스 간 통신을 위해 파이프가 사용 되었기 때문에 이것이 최선의 선택이라고 말할 수 있습니다. 디스크의 I/O는 피해야합니다. 그리고 모든 무거운 tcp/ip 과부하는 피해야합니다. 그래서 파이프가 가장 좋습니다.

+0

그는 OS 파이프에 대해 이야기하지 않았습니다. 그는 Java PipedInputStream, PipedOutputStream – mikeslattery

+0

을 알고있었습니다. 난 그냥 시스템에서 동일한 문제를 비교했다 : 자바에서 스레드가 통신 할 수있게하는 방법? OS에서 스레드가 어떻게 통신합니까? 파이프가 최상의 솔루션입니다. 자바 파이프는 디스크에 I/O가없고 tcp/ip가 필요하지 않으며 너무 많은 데이터를 보낸 후에 차단됩니다. 파이프 블록이 가장 중요한 요소 일 것입니다. 다른 Java 입출력 스트림도 같은 방식으로 차단하지 않습니다. – eppesuig