2013-10-03 2 views
0

Windows 명령 프롬프트에서 코드 줄을 실행할 Java 프로그램을 작성하려고합니다. 일부 RAR 파일을 추출하는 데 외부 프로그램 (7-Zip)을 사용하고 싶습니다. (이보다 더 복잡하지만 가까이에있는 문제는 중요하지 않습니다.)실제로 데이터를 쓰지 않고 Java에서 버퍼를 비우는 방법?

런타임 인스턴스가 있고 .exec() 메서드를 사용했습니다. 하나의 압축 파일을 압축 해제하려고 시도하지만 동시에 많은 압축을 풀려고 할 때 프로세스가 중단되고 .waitFor()가 반환되지 않습니다.

나는이 문제를 연구했으며 그것이 프로세스가 생산하는 결과물에 의한 것이라고 생각한다. 어떤 버퍼 나 다른 프로그램이 가득 차서 프로그램을 잠그고있는 것 같습니다. 나는 here이라고 설명했다. 필자는이 솔루션을 구현했는데 (필자는 imput 스트림을 사용하여 파일로 전송했다) 실제로 작동했다. 그러나 완전히 불필요한 결과물을 모두 작성하는 데 많은 시간이 걸리는 것으로 보입니다.

BufferedReader를 실제로 작성하지 않고 버퍼에있는 모든 내용을 작성했다고 생각하도록하는 방법이 있다면 궁금합니다.

맨 아래까지 읽어 주셔서 감사합니다.

+0

출력을 'NUL'으로 리디렉션하십시오. 다음을 참조하십시오. http : //stackoverflow.com/questions/313111/dev-null-in-windows – mgiri935

+0

BufferedReader.skip (long n)에 관심이있을 수 있습니다. 알려진 양의 문자를 건너 뛸 수 있습니다. 정확히 모든 버퍼를 건너 뛰는 좋은 방법은 아닙니다. – DeadlyFugu

+0

mgiri935, 나는 그 게시물을 보았고 어떤 수준에서 작동하는 것 같습니다. 그러나, 그것을 사용할 때 waitfor() 메서드는 결코 실제로 기다리지 않습니다. 아마도 출력이나 무언가가 없기 때문에 프로세스가 이미 완료되었다고 가정 할 수 있습니다. –

답변

1

교수형 자바 파트가 아니며 더 이상 출력 할 수 없을 때 차단하는 네이티브 응용 프로그램입니다.

Java에서 작동하도록하는 코드가 이미 있으므로, 그걸 고수하지 않으시겠습니까?

다음 최적의 옵션은 외부 프로세스가 출력을 생성하지 않도록하는 것입니다. 어쩌면 "조용한"깃발이 있습니까? 리눅스에서는/dev/null에 파이프 할 수도 있습니다. Windows has an equivalent (파일로 파이프 할 수 있다고 가정)이 맞는지 확실하지 않습니다.

관련 문제