문제
다음 코드 블록의 PrintStram에서 읽으려고 합니다(수신 데이터를 로컬 문자열에 추가).
System.out.println("Starting Login Test Cases...");
out = new PrintStream(new ByteArrayOutputStream());
command_feeder = new PipedWriter();
PipedReader in = new PipedReader(command_feeder);
main_controller = new Controller(in, out);
for(int i = 0; i < cases.length; i++)
{
command_feeder.write(cases[i]);
}
main_controller는 out(PrintStream)에 일부 문자열을 쓸 것입니다. 그러면 Controller 클래스의 코드를 변경할 수 없다고 가정하고 이 PrintStream에서 어떻게 읽을 수 있습니까?미리 감사드립니다.
해결책
단순히 말 : 당신은 할 수 없습니다. Printstream을위한 것입니다 출력, 데이터를 읽으려면 입력 스트림 (또는 하위 클래스)이 필요합니다.
이미 BytearRayoutputStream이 있습니다. 가장 쉬운 것은 다음과 같습니다.
// ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
out = new PrintStream(baos);
// ...
ByteArrayInputStream in = new ByteArrayInputStream(baos.toByteArray());
// use in to read the data
다른 팁
기본 바이트 배열 출력 스트림에 대한 참조를 유지하면 Tostring (String Encoding) 그것에, 또는 TobyTearRay ().
나는 당신이 전자를 원한다고 생각하고 문자열이 작성된 방식에 맞게 인코딩을 지정해야합니다 (기본 인코딩 변형을 사용하여 도망 갈 수 있습니다).
컨트롤러를 변경할 수 없으므로 컨트롤러에 대한 프로세스를 시작하고 프로세스의 출력을 읽습니다.
예.
제휴하지 않습니다 StackOverflow