ProcessBuilder에 대한 비차단 출력 리디렉션
Java에서 프로세스를 실행하기 위해 ProcessBuilder는 편리한 접근 방식을 제공합니다. 그러나 실행된 프로세스의 stdout 및 stderr 스트림을 System.out으로 비동기적으로 리디렉션해야 할 때 문제가 발생합니다.
스레드를 사용한 비동기 리디렉션
한 가지 일반적인 방법 stdOut에서 지속적으로 읽고 System.out에 쓰는 새 스레드를 수동으로 생성하는 작업이 포함됩니다. 이 접근 방식은 기능적이지만 추가적인 스레드 관리 오버헤드를 생성합니다.
ProcessBuilder.inheritIO를 사용한 우아한 솔루션
Java 7 이상을 사용할 수 있는 경우 ProcessBuilder는 더 간단하고 우아한 솔루션: ProcessBuilder.inheritIO. 이 방법은 상위 Java 프로세스의 표준 I/O 스트림을 상속하도록 하위 프로세스의 표준 I/O 스트림을 설정합니다.
inheritIO 사용은 간단합니다.
Process p = new ProcessBuilder().inheritIO().command("command1").start();
이전 Java 버전에 대한 대안
Java 7 이전 버전의 경우 다음 구현이 가능합니다. 사용됨:
import java.io.*; import java.util.Scanner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class NonBlockingOutputRedirection { public static void main(String[] args) throws Exception { ExecutorService executorService = Executors.newSingleThreadExecutor(); Process p = Runtime.getRuntime().exec("cmd /c dir"); inheritIO(p.getInputStream(), System.out, executorService); inheritIO(p.getErrorStream(), System.err, executorService); } private static void inheritIO(final InputStream src, final PrintStream dest, ExecutorService executorService) { executorService.execute(() -> { Scanner scanner = new Scanner(src); while (scanner.hasNextLine()) { dest.println(scanner.nextLine()); } }); executorService.shutdown(); } }
이 방법의 장점
이 방법은 여러 가지 장점을 제공합니다.
- 비동기: 출력 리디렉션이 백그라운드에서 발생하여 기본 thread.
- 자동 스레드 종료: 하위 프로세스가 완료되면 입력 스트림의 파일 끝으로 인해 출력 리디렉션을 담당하는 스레드가 자동으로 종료됩니다.
전체적으로 Java 7 이상에서 ProcessBuilder.inheritIO를 사용하거나 이전 버전의 대체 구현을 사용하면 다음을 달성하는 깔끔하고 효율적인 방법을 제공합니다. ProcessBuilder로 시작된 프로세스에 대한 비차단 출력 리디렉션.
위 내용은 ProcessBuilder에 대한 비차단 출력 리디렉션을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Java는 플랫폼 별 문제를 어떻게 완화합니까? Java는 JVM 및 표준 라이브러리를 통해 플랫폼 독립성을 구현합니다. 1) Bytecode 및 JVM을 사용하여 운영 체제 차이를 추상화합니다. 2) 표준 라이브러리는 Paths 클래스 처리 파일 경로 및 Charset 클래스 처리 문자 인코딩과 같은 크로스 플랫폼 API를 제공합니다. 3) 최적화 및 디버깅을 위해 실제 프로젝트에서 구성 파일 및 다중 플랫폼 테스트를 사용하십시오.

java'splatformincendenceenhancesmicroservicesarchitectureDeploymentFlexibility, 일관성, 확장 성 및 포트 가능성

Graalvm은 Java의 플랫폼 독립성을 세 가지 방식으로 향상시킵니다. 1. 교차 언어 상호 운용성, Java는 다른 언어와 원활하게 상호 작용할 수 있습니다. 2. 독립적 인 런타임 환경, Java 프로그램을 GraalvMnativeImage를 통해 로컬 실행 파일로 컴파일합니다. 3. 성능 최적화, Graal Compiler는 Java 프로그램의 성능과 일관성을 향상시키기 위해 효율적인 기계 코드를 생성합니다.

ToEffectIallyTestJavaApplicationSforplatformcompatibility, followthesesteps : 1) setupAutomatedTestingAcrossMultiplePlatflatformsUsingCitools likeJenkinsorgitHubactions.2) 행동 관리자는 realHardwaretoCathissesnotfoundInvironmentments.3) Checkcross-Pla

Java Compiler는 소스 코드를 플랫폼 독립적 인 바이트 코드로 변환하여 Java의 플랫폼 독립성을 실현하여 JVM이 설치된 JVM 프로그램에서 모든 운영 체제에서 실행할 수 있습니다.

Bytecodeachievesplatformincendence는 executedbirtualmachine (vm)을 beenecutedbyavirtmachine (vm)을 허용합니다

Java는 100% 플랫폼 독립성을 달성 할 수 없지만 플랫폼 독립성은 JVM 및 바이트 코드를 통해 구현되어 코드가 다른 플랫폼에서 실행되도록합니다. 특정 구현에는 다음이 포함됩니다. 1. 바이트 코드로의 컴파일; 2. JVM의 해석 및 실행; 3. 표준 라이브러리의 일관성. 그러나 JVM 구현 차이, 운영 체제 및 하드웨어 차이, 타사 라이브러리의 호환성은 플랫폼 독립성에 영향을 줄 수 있습니다.

Java는 "Writ 2. 유지 보수 비용이 낮 으면 하나의 수정 만 필요합니다. 3. 높은 팀 협업 효율성은 높고 지식 공유에 편리합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

드림위버 CS6
시각적 웹 개발 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
