[十九]JavaIO之PipedReader 和 PipedWriter
功能简介
p, li { white-space: pre-wrap; }
|
使用管道通信时,必须将PipedOutputStream和PipedInputStream配套使用 |
|
大致流程: 我们在线程A中向PipedOutputStream中写入数据,这些数据会自动的发送到与PipedOutputStream对应的PipedInputStream中,进而存储在PipedInputStream的缓冲中; 线程B通过读取PipedInputStream中的数据 |
|
对照到我上面画的图就是这样:
|
| 我们现在看下PipedReader 和 PipedWriter的关键的成员变量 你应该可以想得到 他们的实现逻辑跟PipedInputStream和PipeOutputStream是类似的 |
![]()
|
| PipedReader PipedWriter 基本原理和工作流程 |
|
PipedWriter中有一个 PipedReader sink成员变量
PipedReader 中有一个缓冲区char buffer[] 可以用于保存数据
他们本质上操作的都是这个缓冲区
PipedReader操作的自己的缓冲区
PipedWriter 操作的是PipedReader 的缓冲区
PipedWriter 需要和PipedReader进行连接,或者在构造的时候直接连接
连接之后,就形成了一个管道 (其实就是PipedWriter 内部可以调用PipedReader 的方法)
PipedWriter 写入的数据,可以通过PipedReader 进行读取
|
构造方法
|
指定缓冲区大小, 不连接
默认缓冲区大小, 不连接
指定缓冲区大小, 连接
默认缓冲区大小, 连接
|
|
| 对于PipedWriter 有两种形式 单纯的创建一个PIpedWriter 或者创建的同时一并连接到一个PipedReader |
|
其他方法
| connect方法,根本形式只有一种 不管是PipedWriter连接PipedReader 还是 PipedReader 连接 PipedReader |
|
| 首先真正的将PipedReader和PipedWriter进行连接,也就是设置sink 然后就是设置in和out 他们是写入PipedReader中的缓冲区和从缓冲区读取的索引号 然后就是标志已经连接成功了 |
| PipedWriter 提供了两个版本的write方法 写入一个字符 或者写入一些字符 从cbuf[] off偏移量开始的len个字符 public void write(int c) throws IOException public void write(char cbuf[], int off, int len) throws IOException |
|
| 看得出来,PipedReader也是有一个receive方法,用来写入缓冲区 |
| PipedReader 提供了两个版本的read方法 读取一个字符 或者读取指定个数的字符数目 保存到指定的数组,到她的指定的位置 public synchronized int read() throws IOException public synchronized int read(char cbuf[], int off, int len) throws IOException |
| PipedReader 提供了ready in是写入数据的下一个索引值,默认是-1 如果小于0 显然没有任何数据已经被写入,也就是PipedReader中的缓冲区中并没有数据 也就是没ready |
|
总结
[十九]JavaIO之PipedReader 和 PipedWriter的更多相关文章
- Java-IO之PipedReader和PipedWriter
PipedReader和PipedWriter与PipedInputStream和PipedOutputStream一样,都可以用于管道通信.PipedWriter是字符管道输出流,继承于Writer ...
- javaIO——PipedReader 和 PipedWriter 实现模拟即时聊天
上一篇学习了javaIO里面的 PipedReader 和 PipedWriter,这里对两个类做一个小小的练习:实现一个即时消息发送和接收的聊天系统(这里只实现单向发送,双向同理,定义两个管道即可) ...
- 无废话ExtJs 入门教程十九[API的使用]
无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programmin ...
- Python之路【第十九章】:Django进阶
Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...
- Bootstrap <基础二十九>面板(Panels)
Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...
- Bootstrap <基础十九>分页
Bootstrap 支持的分页特性.分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页. 分页(Pagination) 下表列出了 Bootstrap 提 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】
<Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- Python之路【第十九篇】:爬虫
Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
随机推荐
- 【自动化测试】robotframework中一些建议可能需要掌握的关键字
这是2019年的第一篇文章,因公司事情较多,导致更新缓慢.这次主要推荐一些可能在使用rf工具的时候需要掌握的关键字. 1. @{cloose_ele} get webelements xpath= ...
- Hive+Sqoop+Mysql整合
Hive+Sqoop+Mysql整合 在本文中,LZ随意想到了一个场景: 车,道路,监控,摄像头 即当一辆车在道路上面行驶的时候,道路上面的监控点里面的摄像头就会对车进行数据采集. 我们对采集的数据进 ...
- 【原创】XAF常用属性字段设置
1.IP地址IPV4 [XafDisplayName()] [ModelDefault("EditMaskType", "RegEx")] [ModelDefa ...
- windows10下Kafka环境搭建
内容小白,包含JDK+Zookeeper+Kafka三部分.JDK:1) 安装包:Java SE Development Kit 9.0.1 下载地址:http://www.oracle ...
- tomcat +jenkios
来源:https://www.cnblogs.com/edward2013/p/5269465.html 1. 安装JDK JDK下载地址: http://www.oracle.com/techne ...
- hibernate封装Until工具类
public class HibernateUntil { private static SessionFactory sessionfaction; //一个web项目确保只调用一个sessionf ...
- module.exports与exports,export与export default之间的关系和区别
首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个 ...
- [Swift]LeetCode58. 最后一个单词的长度 | Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...
- Maven项目执行java入口main方法
在Maven项目中配置pom.xml文件加载maven-surefire-plugin插件来执行testng.xml,相信大家对此种用法已经非常熟悉了.但是有些场景可能需要我们去加载执行java的ma ...
- SpringMVC接收json数组对象
最近帮一个妹子解决一个需求,就是前台使用ajax传三个相同的对象,再加一个form表单对象.然后遇到各种问题,终于解决了,@RequestBody接收Json对象字符串 以前,一直以为在Spring ...

