process 입 출력 흐름 의 올 바른 사용
3071 단어 자바 초보 노트
#include
#include
using namespace std;
void main(){
cout< string i;
cin>>i;
cout<}
Codebyfair_jm 20120305 오류 가 있 으 시 면 양해 해 주 십시오^ ^
이상 은 시험 목표 의 C++프로그램 입 니 다.
다음은 시험 용 자바 프로그램 입 니 다.
import java.io.*;
public class TestDemo
{
Process pc;
Runtime rt;
public TestDemo() throws Exception{
rt=Runtime.getRuntime();
String [] ss={"E:\\work\\Demo\\src\\Test.exe"};
pc=rt.exec(ss);
//readIt();
writeIt();
}
public static void main(String args[]) throws Exception{
new TestDemo();
}
public void writeIt(){
OutputStream fos=pc.getOutputStream();
PrintStream ps=new PrintStream(fos);
ps.print("another
");
ps.flush(); // read
readIt();
}
public void readIt(){
InputStream ios=pc.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ios));
String s;
try{
while((s=br.readLine())!=null){
System.out.println(s);
}
br.close();
ios.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
이상 의 방법 은 Readit()가 먼저 쓰 면 또 막 히 기 때문에 스 레 드 로 해결 하 는 것 이 좋 습 니 다.
막 힌 생 성:
입력 흐름(호출 된 프로그램의 출력 흐름 getInputStream 에 해당 함)을 먼저 읽 으 면 입력 한 곳(cin)이 막 히 고 입력 을 기다 리 고 있 습 니 다.(스 레 드 를 사용 하지 않 으 면 계속 막 혀 있 습 니 다.출력 흐름(호출 된 프로그램의 입력 흐름 에 해당 함)을 통 해 정 보 를 프로 세 스 에 입력 할 수 없습니다.
만약 당신 이 먼저 출력 흐름 으로 호출 된 프로그램 에 입력 하지만 flush()를 사용 하 는 것 을 잊 어 버 리 면 데 이 터 는 전송 할 수 없습니다.
다음은 스 레 드 의 해결 방법 입 니 다.
package aa;
import java.io.*;
public class TestDemo
{
Process pc;
Runtime rt;
public TestDemo() throws Exception{
rt=Runtime.getRuntime();
String [] ss={"E:\\work\\Demo\\src\\Test.exe"};
pc=rt.exec(ss);
new Thread(new Input()).start();
Thread.sleep(500);
new Thread(new Output()).start();
}
public static void main(String args[]) throws Exception{
new TestDemo();
}
class Output implements Runnable
{
public void run(){
OutputStream fos=pc.getOutputStream();
PrintStream ps=new PrintStream(fos);
ps.print("another
");
System.out.println(" ");
ps.flush();
}
}
class Input implements Runnable
{
public void run(){
InputStream ios=pc.getInputStream();
BufferedReader brd=new BufferedReader(new InputStreamReader(ios));
String s;
try{
while((s=brd.readLine())!=null){
System.out.println(s);
}
}catch(Exception e){
}
pc.destroy();
}
}
}