>Java >java지도 시간 >Java 프로세스에서 입력/출력 스트림을 안정적으로 처리하는 방법은 무엇입니까?

Java 프로세스에서 입력/출력 스트림을 안정적으로 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-17 21:16:11774검색

How to Reliably Handle Input/Output Streams in Java Processes?

입력/출력 스트림이 있는 Java 프로세스

이 문서에서는 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;
    }
}

제한 사항

이 접근 방식의 한계를 인정하는 것이 중요합니다. :

  • 사용자 입력을 요청하는 명령으로 인해 프로그램이 나타날 수 있습니다. 응답이 없습니다.
  • 각 프로세스 출력이 줄 바꿈으로 종료된다는 가정이 모든 경우에 적용되는 것은 아닙니다.
  • 실행된 명령이 "--EOF--"를 출력하는 드문 경우가 발생할 수 있습니다. 잘못된 동작.
  • bash 명령에서 일치하지 않는 괄호로 인해 구문 오류가 발생하고 프로세스가 진행될 수 있습니다.

결론

이 문서에 설명된 변경 사항은 Java 프로세스로 작업할 때 입력/출력 스트림의 기능을 유지하면서 직면하는 문제에 대한 포괄적인 솔루션을 제공합니다. 이 기술에는 특정 제한이 있을 수 있지만 셸 명령을 실행하고 예약된 작업을 통해 주기적으로 해당 출력을 검색하는 안정적인 수단을 제공합니다.

위 내용은 Java 프로세스에서 입력/출력 스트림을 안정적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.