黑马程序员技术交流社区

标题: IO流-进程的数据通信 [打印本页]

作者: 李知伦    时间: 2012-8-9 18:39
标题: IO流-进程的数据通信
本帖最后由 李知伦 于 2012-8-9 19:05 编辑

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;

  6. public class TestInOut implements Runnable
  7. {
  8.     Process p=null;
  9.     public TestInOut()
  10.     {
  11.             try
  12.         {
  13.             p=Runtime.getRuntime().exec("java MyTest");
  14.             new Thread(this).start();
  15.         }
  16.             catch(IOException e)
  17.             {
  18.                 e.printStackTrace();
  19.             }        
  20.     }

  21.     public static void main(String [] args)
  22.     {
  23.         TestInOut tio=new TestInOut ();
  24.         tio.send();        
  25.     }
  26.    
  27.     public void send()
  28.     {
  29.             try
  30.         {

  31.                  OutputStream ops=p.getOutputStream();
  32.                  while(true)
  33.                  {
  34.                        //int len=0;
  35.                      //String str="help\r\n";
  36.                      //byte[] buf= str.getBytes();
  37.                      //len=buf.length;
  38.                     //ops.write(buf,0,len);
  39.                      ops.write("help\r\n".getBytes());<font color="Red">//q1.这行eclipse管道已结束,并且继续不停输出null</font>
  40.                  }
  41.            }
  42.             catch(IOException e)
  43.             {
  44.                 e.printStackTrace();
  45.             }
  46.     }

  47.     public void run()
  48.     {
  49.         try
  50.         {
  51.             InputStream in = p.getInputStream();
  52.                    BufferedReader bfr=new BufferedReader(new InputStreamReader(in));
  53.             while(true)
  54.             {
  55.                     String strLine=bfr.readLine();
  56.                     <font color="Lime">//if(strLine!=null)</font>
  57.                         System.out.println(strLine);
  58.                     <font color="Lime">//else
  59.                         //return;</font>
  60.                 }
  61.            }
  62.             catch(IOException e)
  63.             {
  64.                 e.printStackTrace();
  65.                 p.destroy();
  66.             }
  67.     }
  68. }

  69. class MyTest
  70. {
  71.     public static void main(String [] args)
  72.     {
  73.         BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
  74.         while(true)
  75.         {
  76.             try {
  77.                 <font color="Lime">//if(bfr.readLine()!=null)</font>
  78.                     System.out.println("hi:"+bfr.readLine());
  79.                <font color="Lime"> //else
  80.                     //return;</font>
  81.             } catch (IOException e) {
  82.                 // TODO Auto-generated catch block
  83.                 e.printStackTrace();               
  84.             }
  85.             <font color="Lime">//bfr.close();//q2</font>
  86.         }
  87.     }
  88. }
复制代码
Eclipse的输出:
java.io.IOException: 管道已结束。
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(Unknown Source)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.write(Unknown Source)
    at java高级02_IO输入与输出.TestInOut.send(TestInOut.java:43)
    at java高级02_IO输入与输出.TestInOut.main(TestInOut.java:28)

两个问题
q1.这一讲,张老师讲的时候用JCreator说运行它有问题,要在控制台中运行成功,我用的Eclipse就会报异常
q2.老师还说,不能在//q2关闭流,但是如果程序编不好,就会在windo进程中残留java.exe占用大量cpu
    为什么我加上下面代码就不会出现这个问题
   如果用Process的destroy方法,应该用在哪
    if(strLine!=null)
        //codes
    else
        return;

作者: 张_涛    时间: 2012-8-9 19:09
请问楼主,你的帖子以及代码是什么意思?
如果有代码问题,请将代码目的及出错位置标出;
如果不理解,请将疑惑出标出,以及疑惑什么。
这样,别人才好做答,麻烦了。
作者: 李知伦    时间: 2012-8-9 19:18
张_涛 发表于 2012-8-9 19:09
请问楼主,你的帖子以及代码是什么意思?
如果有代码问题,请将代码目的及出错位置标出;
如果不理解,请将 ...

我开始i发的时候没有在高级模式里,直接贴到了发帖的简易窗口里,估计是代码太长了,没有收全
而且我打开和刷新咱们论坛都非常慢.........
我后来重新编辑的





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2