이 문서에서는 Java 프로세스 작업 시 입력 및 출력 스트림 활용의 복잡성을 살펴봅니다. 우리는 특히 이러한 스트림의 기능을 유지하는 데 발생하는 문제를 해결하는 데 중점을 둘 것입니다.
제공된 코드 예제는 bash 셸에 명령을 입력할 수 있고 그에 따른 출력은 다음과 같은 시나리오를 보여줍니다. 울렸다. 그러나 초기 읽기 후에 문제가 발생하여 후속 출력 스트림이 작동하지 않게 됩니다. 이 문서의 목적은 이러한 문제를 설명하고 솔루션을 제안하는 것입니다.
첫 번째 단계에서는 외부 프로세스 실행을 단순화하는 ProcessBuilder 클래스를 활용하도록 코드 조각을 수정하는 작업이 포함됩니다. 주요 이점은 하위 프로세스의 표준 오류 스트림을 표준 출력으로 리디렉션하는 기능입니다.
ProcessBuilder builder = new ProcessBuilder("/bin/bash"); builder.redirectErrorStream(true); Process process = builder.start();
또한 프로세스의 표준 출력을 읽는 역할을 담당하는 루프는 종료 시에만 종료되므로 중단되기 쉽습니다. -리더의 파일입니다. 이 문제를 해결하기 위해 "마법의" 줄을 포함하는 기술을 사용하여 셸 명령 출력의 결론을 구분합니다.
while (scan.hasNext()) { String input = scan.nextLine(); writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n"); writer.flush(); line = reader.readLine(); while (line != null && ! line.trim().equals("--EOF--")) { System.out.println ("Stdout: " + line); line = reader.readLine(); } if (line == null) { break; } }
이 접근 방식의 한계를 인정하는 것이 중요합니다. :
이 문서에 설명된 변경 사항은 Java 프로세스로 작업할 때 입력/출력 스트림의 기능을 유지하면서 직면하는 문제에 대한 포괄적인 솔루션을 제공합니다. 이 기술에는 특정 제한이 있을 수 있지만 셸 명령을 실행하고 예약된 작업을 통해 주기적으로 해당 출력을 검색하는 안정적인 수단을 제공합니다.
위 내용은 Java 프로세스에서 입력/출력 스트림을 안정적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!