郑云飞 发表于 2013-1-15 01:13:34

管道之间的数据通信

package pc; //PipedStreamTest.java //启动类 import java.io.*;   public class PipedStreamTest{      public static void main(String[] args) throws Exception         {            Sender t1 = new Sender(); //创建发送者对象;            Receiver t2 = new Receiver(); //创建接收者对象;            PipedOutputStream out = t1.getOutputStream();            PipedInputStream in = t2.getInputStream();            out.connect(in); //用于连接到PipedInputStream上,与in.connect(out)等价,connect方法有异常出现的可能            t1.start(); //启动线程            t2.start(); //启动线程      }} 
package pc;import java.io.*;//Receiver.java //接收者,也是一个线程类public class Receiver extends Thread{    private PipedInputStream in = new PipedInputStream(); //接受者是要读取外面的数据,所以接受者内部创建PipedInputStream对象用于读取外面的数据    public PipedInputStream getInputStream()    {    //返回管道输入流对象    return in;    }//这是一个线程类,所以它应该覆盖Thread的run方法,run方法在线程类启动时自动运行    public void run()    {      //这里的run方法用于接收数据         byte[] buf = new byte; //字节数组      try      {         //read和close方法都可能有异常出现            int len = in.read(buf); //读取数据,len表示实际读取到的内容(长度)            String str=new String(buf,0,len);            System.out.println("下面的信息来自发送者:\n" +str);            in.close();      }      catch(Exception e)      {      e.printStackTrace();      }    }} 
    package pc;    import java.io.*;    public class Sender extends Thread    {   //表明是个线程类      private PipedOutputStream out = new PipedOutputStream(); //发送者是要向外面写数据,所以发送者内部创建PipedOutputStream对象用于向外写数据      public PipedOutputStream getOutputStream()      {         //返回管道输出流对象      return out;      }      //这是一个线程类,所以它应该覆盖Thread的run方法,run方法在线程类启动时自动运行      public void run()      {            //这里的run方法用于向PipedOutputStream中写入一串数据            String strInfo = new String("hello,receiver!");            try            {             //write和close方法都可能有异常出现                out.write(strInfo.getBytes());                out.close();            }            catch(Exception e)            {            e.printStackTrace();            }      } }     
package pc;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;public class Test{public static void main(String[] args){//创建两个管道流PipedInputStream pin=new PipedInputStream();PipedOutputStream pout=new PipedOutputStream();try{pin.connect(pout);//pin的数据时从pout来} catch (IOException e){e.printStackTrace();}//创建两个线程Thread t1=new Sender(pout);Thread t2=new Receiver(pin);t1.start();t2.start();}}class Sender extends Thread{private DataOutputStream dos;public Sender(PipedOutputStream p){dos=new DataOutputStream(p);}public void run(){try{dos.writeUTF("HelloWorld");dos.close();} catch (IOException e){e.printStackTrace();}}}class Receiver extends Thread{private DataInputStream dis;public Receiver(PipedInputStream p){dis=new DataInputStream(p);}public void run(){try{System.out.println(dis.readUTF());dis.close();} catch (IOException e){e.printStackTrace();}}} 
页: [1]
查看完整版本: 管道之间的数据通信