java管道通信

来源:互联网 发布:手机版淘宝闲鱼在哪里 编辑:程序博客网 时间:2024/05/16 15:30
原文地址: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 extendsThread{

   private PipedOutputStream out=newPipedOutputStream();//发送者创建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;

importjava.io.PipedInputStream; 

public class Reader extendsThread{

   private PipedInputStream in=newPipedInputStream();//发送者创建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:"+newString(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 methodstub

        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();

             }

        }

    }

 

原创粉丝点击