发博文
正文 字体大小:

java管道通信

(2009-02-21 08:56:50)
标签:

java

管道通信

it

分类: java学习

Java提供管道功能,实现管道通信的类有两组:PipedInputStream和PipedOutputStream或者是PipedReader和PipedWriter。管道通信主要用于不同线程间的通信。

一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道。PipedOutputStream向管道中写入数据,PipedIntputStream读取PipedOutputStream向管道中写入的数据。一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据。

PipedInputStream和PipedOutputStream实例

 

 //Sender类

package pipeCommu;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

public class Sender extends Thread{

    private PipedOutputStream out=new PipedOutputStream();//发送者创建PipedOutputStream向外写数据; 

    public PipedOutputStream getOut(){

        return out;

    }

    public void run(){

        String strInfo="hello,receiver";

        try{

            out.write(strInfo.getBytes());//写入数据

            out.close();

        }catch(Exception e){

            e.printStackTrace();

        }

    }

}

 

 //Reader类,负责接收数据

package pipeCommu;

import java.io.PipedInputStream; 

public class Reader extends Thread{

    private PipedInputStream in=new PipedInputStream();//发送者创建PipedOutputStream向外写数据

    public PipedInputStream getIn(){

        return in;

    }

    public void run(){

        byte[] buf=new byte[1024];//声明字节数组

        try{

            int len=in.read(buf);//读取数据,并返回实际读到的字节数

            System.out.println("receive from sender:"+new String(buf,0,len));

            in.close();

        }catch(Exception e){

            e.printStackTrace();

        }

    }

}
package pipeCommu;

import java.io.*;

public class PipedStream {

     public static void main(String[] args) throws Exception{

        Sender send=new Sender();

        Reader read=new Reader();

        PipedOutputStream out=send.getOut();

        PipedInputStream in=read.getIn();

        out.connect(in);//或者也可以用in.connect(out);

        send.start();

        read.start();

    

}


PipedReader和PipedWriter

 

package pipeCommu;

import java.io.*;

public class PipedCommu {

     public static void main(String[] args) {

         // TODO Auto-generated method stub

         try{

              PipedReader reader=new PipedReader();

              PipedWriter writer=new PipedWriter(reader);

              Thread a=new Send(writer);

              Thread b=new Read(reader);

              a.start();

              Thread.sleep(1000);

              b.start();

         }catch(IOException e){

              e.printStackTrace();

             

         }catch(InterruptedException e1){

              e1.printStackTrace();           

         }

     }

}

     class Send extends Thread{

         PipedWriter writer;

         public Send(PipedWriter writer){

              this.writer=writer;

         }

         public void run(){

              try{

                   writer.write("this is a.hello world".toCharArray());

                   writer.close();

              }catch(IOException e){

                   e.printStackTrace();

                        

         }

     }

     class Read extends Thread{

         PipedReader reader;

         public Read(PipedReader reader){

              this.reader=reader;

         }

         public void run(){

              System.out.println("this is B");

              try{

                   char[] buf=new char[1000];

                   reader.read(buf,0,100);

                   System.out.println(new String(buf));

              }catch(Exception e){

                   e.printStackTrace();

              }

         }

     }

 

阅读 评论 收藏 转载 打印举报
已投稿到:
  • 评论加载中,请稍候...

       

    验证码: 请点击后输入验证码 收听验证码

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有