Java语言基础之管道流
来源:互联网 发布:设计价格表的软件 编辑:程序博客网 时间:2024/06/16 14:28
管道流用于线程之间的通信。
PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据.
一个线程的PipedInputStream对象从另外一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。
一共有两种方式实现管道流:
方法1 : 使用Connect进行连接
写入管道:
代码import java.io.IOException;import java.io.PipedOutputStream;public class Producer extends Thread { private PipedOutputStream pos; public Producer(PipedOutputStream pos) { this.pos = pos; } @Override public void run() { super.run(); try { pos.write("Hello".getBytes()); } catch (IOException e) { e.printStackTrace(); } }}
代码import java.io.IOException;import java.io.PipedInputStream;public class Consumer extends Thread { private PipedInputStream pis; public Consumer(PipedInputStream pis) { this.pis = pis; } @Override public void run() { super.run(); byte[] b = new byte[100]; // 将数据保存在byte数组中 try { int len = pis.read(b); // 从数组中得到实际大小。 System.out.println(new String(b, 0, len)); pis.close(); } catch (IOException e) { e.printStackTrace(); } }}
Main:
PipedStreamTestimport java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;public class PipedStreamTest { public static void main(String[] args) { PipedOutputStream pos = new PipedOutputStream(); PipedInputStream pis = new PipedInputStream(); try { pos.connect(pis);// 连接管道 new Producer(pos).start();// 启动线程 new Consumer(pis).start();// 启动线程 } catch (IOException e) { e.printStackTrace(); } }}
方法2 : 是通过构造函数直接将某一个程序的输出作为另一个程序的输入,在定义对象时指明目标管道对象
Sender:
package Com.example.Pipe;import java.io.IOException;import java.io.PipedWriter;public class Sender extends Thread {private PipedWriter out =new PipedWriter(); public PipedWriter getPipedWriter() { return out; } public void run() { while(true) { for(char c='a';c<'z';c++){ try { out.write(c);sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} } } }}
package Com.example.Pipe;import java.io.IOException;import java.io.PipedReader;public class Receiver extends Thread {private PipedReader in;public Receiver(Sender sender) throws IOException { in = new PipedReader(sender.getPipedWriter()); } public void run(){try {while(true){System.out.println("read"+(char)in.read());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
Main:
package Com.example.Pipe;import java.io.IOException;import java.io.PipedWriter;import java.util.Random;public class Main {public static void main(String[] args) throws IOException { Sender sender = new Sender(); Receiver receiver = new Receiver(sender); sender.start(); receiver.start(); }}
0 0
- Java语言基础之管道流
- java IO之管道流
- java 之 语言基础
- Redis基础之管道
- 关于java基础--管道流和压缩
- java基础之IO流中的PipedStream管道流和RandomAcessFile
- java基础之IO流--PipedOutputStream(涉及到多线程技术的管道流,比较特殊)
- Java基础之Java语言基础
- Java语言基础之接口
- java语言基础之继承
- Java语言基础之接口
- java语言基础之enum
- Java回炉之语言基础
- JAVA语言基础之字符串
- 【java编程】IO流之管道流
- JAVA IO之管道流总结大全
- JAVA IO之管道流总结大全
- JAVA IO之管道流总结
- js对象『属性特征』和『对象特征』
- 日期选择器(Datepicker)
- 网狐6603棋牌网站程序后台部分任意文件上传漏洞
- QtE4.6.3触摸屏隐藏鼠标指针的方法总结
- rtp rtcp
- Java语言基础之管道流
- 如何反编译APK包?
- loadrunner脚本的优化技巧(一)
- Linux sed命令详解
- 深入解析String#intern
- Jackson处理java对象,json,xml间转换
- 安装完Redis服务后,远程连接报连接超时错误
- Spring源码阅读之Bean加载(xml)1
- Java Log4J 使用教程(java日志)