2012-11-30 3 views
0

저는 InputStream과 PrintStream을 제공해야하는 라이브러리를 사용하고 있습니다. InputStream을 사용하여 처리 할 데이터를 수집하고 PrintStream을 사용하여 결과를 제공합니다. 이 라이브러리를 사용하여 붙어있어 API를 변경할 수 없습니다.Java를 일종의 "버퍼"로 사용하는 Java

관련 솔루션이 있다고 생각되는 두 가지 문제가 있습니다.

먼저, InputStream을 통해 읽어야하는 데이터는 미리 사용할 수 없습니다. 대신 데이터는 응용 프로그램의 다른 부분에서 동적으로 만들어지고 메서드 호출을 통해 String으로 내 코드에 제공됩니다. 내 코드의 일은 내가 얻은대로 제공된 InputStream을 통해 라이브러리가이 데이터를 읽도록 허용하는 것이다.

두 번째로, PrintStream에 작성된 결과를 어떻게 든 얻고 응용 프로그램의 다른 부분에 String으로 보내야합니다. 가능한 한 PrintStream에 데이터를 입력 한 직후에이 작업을 수행해야합니다.

버퍼가 다소 비슷하게 동작하는 두 개의 스트림 개체가 필요합니다. InputStream을 필요로 할 때마다 데이터를 넣을 수 있고 PrintStream을 사용하면 내용이있을 때마다 잡을 수 있습니다. 이것은 나에게 약간 어색한 것처럼 보이지만, 어떻게해야할지 모르겠습니다.

이런 종류의 동작을 허용하는 것이 있거나 이미 설명한 상황에서 작동하는 다른 (더 나은) 솔루션이 있는지 궁금합니다. 내가 할 수있는 유일한 방법은이 동작을 사용하여 스트림을 구현하는 것입니다.하지만 빠르게 복잡해질 수 있습니다 (특히 InputStream이 데이터를 사용할 수있을 때까지 차단해야하기 때문에).

아이디어가 있으십니까?

편집 : 분명히 라이브러리를 쓰고 있지 않습니다. 라이브러리에 데이터를 읽는 InputStream과 데이터를 쓰는 PrintStream을 제공하기로되어있는 코드를 작성하고 있습니다.

+1

무엇을 시도 했습니까? 약간의 코딩만으로이 작업을 수행 할 수 있습니다. 이것은 표준 소켓 프로그래밍과 다르지 않습니다. –

+0

버퍼를 갖기 위해 InputStream과 OutputStream을 구현하기 시작했으나, InputStream 버퍼에서 데이터를 사용할 수 없을 때 올바르게 블록하는 방법에 어려움을 겪었다. 또한 응용 프로그램은 스레드이므로 동기화가 문제가되어 정확한 사례에서 올바른 스레드를 차단하고 데이터를 사용할 수있을 때 다시 깨우는 방법을 잊어 버렸습니다. – dawsonc623

답변

0

두 스트림이 항상 읽기/쓰기가되어야하는 것처럼 보이므로 서로 독립적 인 두 개의 스레드가 필요합니다. 패턴은 JMS와 조금 비슷합니다.이 경우 "대기열"또는 "주제"에 정보를 제공하고 처리 된 다음 "출력"대기열/주제에 대기합니다. 이로 인해 추가적인 움직이는 부분이 생길 수도 있지만 정보를 JMS 대기열에 배치하고 메시지를 잡기위한 리스너를 가지며 입력 스트림에 지속적으로 피드 할 간단한 클라이언트를 작성할 수 있습니다. 그런 다음 출력 스트림에서 읽을 코드의 다른 부분을 읽고 필요한 부분을 수행하십시오. 희망이 도움이됩니다.

관련 문제