管道流PipedOutputStream和PipedInputStream的使用-黑马程序员

来源:互联网 发布:易语言循环查询数据库 编辑:程序博客网 时间:2024/06/07 23:10

发送类 Sender

public class Sender extends Thread{PipedOutputStream pOutputStream = new PipedOutputStream();public PipedOutputStream getOutputStream(){return pOutputStream;}@Overridepublic void run() {try {System.out.println("sender run.....");String text = new String("www.nc0476.com");pOutputStream.write(text.getBytes());} catch (IOException e) {e.printStackTrace();}finally{if(pOutputStream!=null){try {pOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}}}

接收类 Receive  与ByteArrayOutputStream 结合使用

public class Receiver extends Thread{PipedInputStream pipedInputStream = new PipedInputStream();public PipedInputStream getInputStream(){return pipedInputStream;}@Overridepublic void run() {try {System.out.println("receiver run.....");byte[] buf = new byte[1024];int len = 0;//把管道流信息放入到内存中ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();while((len= pipedInputStream.read(buf))!=-1){ byteArrayOutputStream.write(buf,0,len);}System.out.println(new String(byteArrayOutputStream.toByteArray()));//2,直接读取//int len = pipedInputStream.read(buf);//System.out.println("pip="+new String(buf,0,len));} catch (IOException e) {e.printStackTrace();}finally{if(pipedInputStream!=null){try {pipedInputStream.close();} catch (IOException e) {e.printStackTrace();}}}}

测试类

@Testpublic void test1() throws Exception{}{Sender sender = new Sender();Receiver receiver = new Receiver();PipedOutputStream pipedOutputStream = sender.getOutputStream();PipedInputStream pipedInputStream = receiver.getInputStream();try {System.out.println("test1");                        //输入流与输出流相互连接pipedOutputStream.connect(pipedInputStream);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}sender.start();receiver.start();}