//Process类的实例对象来表示子进程。是以管道流的形式连接到父进程的一个输出流和输入流的对象上
//调用Process类的getOutputStream和getInputStream方法可获得连接子进程的输出流和输入流对象。
在TestInOut类启动java.exe执行另一个MyTest类。
TestInOut和MyTest通过进程间的管道相互传递数据。
DEMO:
import java.io.*;
class TestInOut implements Runnable{
Process p=null;
public TestInOut(){
try{
//要启动一个子进程
p=Runtime.getRuntime().exec("java MyTest");//执行外部命令
new Thread(this).start();//启动线程
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
TestInOut tio=new TestInOut();
tio.send();
}
//向子进程写数据
public void send(){
try{
OutputStream ops=p.getOutputStream();//获取子进程的输出流,写入
while(true){
ops.write("help/r/n".getBytes());
}
}catch(Exception e){
e.printStackTrace();
}
}
//接收数据
public void run(){
try{
InputStream in=p.getInputStream();//获取子进程的输入流,读取
BufferedReader bfr=new BufferedReader(new InputStreamReader(in));//字节流转字符流
while(true){
String strLine=bfr.readLine();//读取一行
if(strLine!=null)
{
System.out.println(strLine);
}else
{
return ;
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
import java.io.*;
class MyTest
{
public static void main(String[] args) throws Exception
{
while(true){
String strLine=new BufferedReader(new InputStreamReader(System.in)).readLine();
if(strLine!=null){
System.out.println("hi:"+ strLine);//对应父进程的输出管道
}else
{
return ;
}
}
}
}