import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream; public class Test4 { public static void main(String[] args) {
PipedInputStream pin = new PipedInputStream();
PipedOutputStream pout = new PipedOutputStream(); try {
pin.connect(pout);// 输入流与输出流链接
} catch (Exception e) {
e.printStackTrace();// 这是便于调试用的,上线的时候不需要
} new Thread(new ReadThread(pin)).start();
new Thread(new WriteThread(pout)).start(); // 输出结果:读到: 一个美女。。
/** 可能结果
* ReadThread读取数据,没有数据阻塞
* WriteThread开始写入数据,等待6秒后
* WriteThread写入内容结束
* ReadThread读到数据,阻塞结束
* ReadThread读到: 一个美女。。
*/
}
} // 读取数据的线程
class ReadThread implements Runnable {
private PipedInputStream pin;// 输入管道 public ReadThread(PipedInputStream pin) {
this.pin = pin;
} @Override
public void run() {
try {
byte[] buf = new byte[1024]; System.out.println("ReadThread读取数据,没有数据阻塞");
int len = pin.read(buf);// read阻塞
System.out.println("ReadThread读到数据,阻塞结束"); String s = new String(buf, 0, len);
System.out.println("ReadThread读到: " + s);
pin.close();
} catch (IOException e) {
e.printStackTrace();
}
}// run
}// ReadThread // 写入数据的线程
class WriteThread implements Runnable {
private PipedOutputStream pout;// 输出管道 public WriteThread(PipedOutputStream pout) {
this.pout = pout;
} @Override
public void run() {
try {
System.out.println("WriteThread开始写入数据,等待6秒后");
Thread.sleep(6000);
pout.write("一个美女。。".getBytes());// 管道输出流
pout.close();
System.out.println("WriteThread写入内容结束");
} catch (Exception e) {
e.printStackTrace();
}
}// run
}// WriteThread

  

Java IO管道流的更多相关文章

  1. java IO 管道流PipedOutputStream/PipedInputStream

    详情:管道流的具体实现 import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputS ...

  2. Java IO: 字符流的Piped和CharArray

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.Pip ...

  3. Java IO: 管道

    原文链接 作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力.所以管道也可以作为 ...

  4. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  5. Java IO 嵌套流、文本的输入输出和存储

    Java IO 嵌套流.文本的输入输出和存储 @author ixenos 1.   组合流过滤器(嵌套流) a)    跨平台文件分割符:常量字符串 java.io.File.seperator 等 ...

  6. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  7. Java IO 过滤流 BufferedInput/OutputStream

    Java IO 过滤流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是Fi ...

  8. Java IO 节点流 FileInput/OutputStream

    Java IO 节点流 FileInput/OutputStream @author ixenos 节点流之 文件流 文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容 1.文件的读 ...

  9. Java IO 理解流的概念

    Java IO 理解流的概念 @author ixenos 在理解流时首先理解以下概念 1.流的来源和去向一般在构造器指出 2.方法中的形参一般是将流输出到某个位置,读取(INPUT)流从流读出数据( ...

随机推荐

  1. 前端开发 Vue Vue.js和Nodejs的关系

    首先vue.js 是库,不是框架,不是框架,不是框架. Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. Vue.js 的核心是一个允许你 ...

  2. Vue2.0的核心思想

    Vue的核心思想为数据驱动和组件化. 一.数据驱动——双向绑定 Vue是一种MVVM框架.而DOM是数据的一个种自然映射.传统的模式是通过Ajax请求从model请求数据,然后手动的触发DOM传入数据 ...

  3. Referer和空Referer

    参考CSDN 原文:https://blog.csdn.net/hxl188/article/details/38964743 Referer和空Referer 最近公司有个接口需要针对几个域名加白名 ...

  4. union 和 union all的区别

    union 和 union all的区别 相同点和不同点 相同点:union和union all 都是对于多个查询结果的并集进行操作不同点:1.union 不会输出两个结果并集的重复行2.union ...

  5. MySQL Replication--双主结构优缺点

    双主架构图 双主架构实现原理当从库IO线程接受到主库传递来的二进制日志(Binlog)并将之保存为从库的中继日志(relay log),然后从库SQL线程将中继日志(relay log)的事件重做到从 ...

  6. array_reduce() 与 array_map()

    相似部分: 二者同为 处理数组函数,可遍历 数组中的每一个元素, 对其通过 function callback(){} 处理. 不同处: 参数: array_reduce( array, callba ...

  7. c# 格式化数据String.Format

  8. Python基础Day1—下

    六.Python运行 print()   打印命令,输出到屏幕上 操作: 命令提示符-->输入Python-->文件路径 若输入Python回车报错或者提示没有,则Python解释器没有安 ...

  9. Spring Boot文档

    本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...

  10. Replica set 的选举策略之一 (转)

    首先介绍一下在replica set里分为三种节点类型: 1 primary   负责client的读写. 2 secondary 作为热备节点,应用Primary的oplog读取的操作日志,和pri ...