PipedOutputStream和PipedInputStream管道实现线程通信
来源:互联网 发布:华为盒子看电影软件 编辑:程序博客网 时间:2024/06/10 02:24
PipedOutputStream和PipedInputStream通过字节流实现线程间的通信,
通过PipedOutputStream.connect(PipedInputStream snk)
或 PipedInputStream.connect(PipedOutputStream src)建立连接。
实例:
1. 使用PipedOutputStream输出流写入数据
package com.lanhuigu.JavaBase.thread.waitnotify6;import java.io.IOException;import java.io.PipedOutputStream;/** * 通过输出流--写入数据 */public class WriteData {public void writeMethod(PipedOutputStream out) {try {for (int i = 0; i < 500; i++) {String outData = "" + (i+1);out.write(outData.getBytes());System.out.println("写入数据:" + outData);}// 关闭输出流out.close();} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}}}
2. 使用PipedInputStream输入流读出数据
package com.lanhuigu.JavaBase.thread.waitnotify6;import java.io.IOException;import java.io.PipedInputStream;/** * 通过输入流--读出数据 */public class ReadData {public void readMethod(PipedInputStream input) {try {byte[] byteArray = new byte[20];int readLength = input.read(byteArray);while (readLength != -1) {String newData = new String(byteArray, 0, readLength);System.out.println("读出数据:" + newData);readLength = input.read(byteArray);}// 关闭流input.close();} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}}}
3. 写入数据线程
package com.lanhuigu.JavaBase.thread.waitnotify6;import java.io.PipedOutputStream;/** * 根据输出流--写入数据--线程 */public class WriteThread extends Thread{private WriteData writeData;private PipedOutputStream out;public WriteThread(WriteData writeData, PipedOutputStream out) {// TODO Auto-generated constructor stubsuper();this.writeData = writeData;this.out = out;}@Overridepublic void run() {// TODO Auto-generated method stubwriteData.writeMethod(out);}}
4. 读出数据线程
package com.lanhuigu.JavaBase.thread.waitnotify6;import java.io.PipedInputStream;/** * 根据输入流--读出数据--线程 */public class ReadThread extends Thread{private ReadData readData;private PipedInputStream input;public ReadThread(ReadData readData, PipedInputStream input) {// TODO Auto-generated constructor stubsuper();this.readData = readData;this.input = input;}@Overridepublic void run() {// TODO Auto-generated method stubreadData.readMethod(input);}}
5. 测试类
package com.lanhuigu.JavaBase.thread.waitnotify6;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;/** * 测试类 */public class RunTest {public static void main(String[] args) {try {WriteData writeData = new WriteData();ReadData readData = new ReadData();PipedInputStream inputStream = new PipedInputStream();PipedOutputStream outputStream = new PipedOutputStream();/* * 通过 inputStream.connect(outputStream) * 或 * outputStream.connect(inputStream) * 使得两个Stream之间产生通信链接,进行数据交换输出与输入。 *///inputStream.connect(outputStream);outputStream.connect(inputStream);ReadThread readThread = new ReadThread(readData, inputStream);readThread.start();Thread.sleep(3000);// 休眠3秒WriteThread writeThread = new WriteThread(writeData, outputStream);writeThread.start();} catch (IOException e) {// 流异常// TODO: handle exceptione.printStackTrace();} catch (InterruptedException e) {// 线程中断异常// TODO Auto-generated catch blocke.printStackTrace();}}}
代码分析:
(1) 代码中通过 inputStream.connect(outputStream)或outputStream.connect(inputStream)使得两个Stream之间产生通信链接,进行数据交换输出与输入,从而实现线程通信。
(2) 当线程ReadThread启动时,int readLength = input.read(byteArray)未读取到数据,
只有当线程WrithThread启动后,开始写入数据,ReadThread才能够读取到数据。
阅读全文
0 0
- PipedOutputStream和PipedInputStream管道实现线程通信
- PipedInputStream and PipedOutputStream 实现管道通信
- 管道流PipedInputStream 和PipedOutputStream
- PipedInputStream和PipedOutputStream管道流
- java 管道流之PipedOutputStream和PipedInputStream
- 管道PipedInputStream/PipedOutputStream类
- 管道PipedInputStream/PipedOutputStream类
- Java管道 PipedInputStream PipedOutputStream
- 黑马程序员——管道流:PipedInputStream和PipedOutputStream与线程的结合运用
- PipedInputStream管道输出流和PipedOutputStream管道输入流
- 管道PipedInputStream/PipedOutputStream类应用
- java 线程间的通信 pipedOutStream 和PipedInputStream 管道流
- 管道流PipedOutputStream和PipedInputStream的使用-黑马程序员
- java 管道流PipedOutputStream和PipedInputStream基本操作
- java学习笔记:管道流PipedInputStream和PipedOutputStream
- Java-IO之管道(PipedInputStream和PipedOutputStream)
- 【java基础:IO】管道流PipedInputStream和PipedOutputStream的Demostration
- PipedInputStream和PipedOutputStream
- 嵌入式多功能电子相册之上位机
- 排列数组中数字得出最大数算法
- Android O 行为变更(二)
- 订阅Linux内核邮件列表
- HDU-2017 多校训练赛3-1004-Kanade's trio
- PipedOutputStream和PipedInputStream管道实现线程通信
- python爬虫上手 笔记<3>
- java8初探
- QAV250四轴穿越机安装全程详解(多图)
- 洛谷Oj-单词接龙-深度优先搜索
- webpack的基本使用(二)
- 背包九讲
- g++和gcc的区别
- 内存分配的发展历史