[十九]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社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
随机推荐
- RCNN论文细节
写在前面: 本系列笔记主要记录本人在阅读过程中的收获,尽量详细到实现层次,水平有限,欢迎留言指出问题~ 这篇文章被认为是深度学习应用于目标检测的开山之作,自然是要好好读一下的,由于文章是前些日子读的, ...
- 面试题5-[剑指offer] 二维数组中的查找
题目 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- vue 登录跳转
前几次做登录处理,都是写一个公用方法,然后在对应的路由页面调用,即判断是不是处于登录状态,如果不是,就返回登录页面. let exit = (vm)=>{ let login = session ...
- C# CreateParams的使用(解决闪屏问题)
<转载自:https://blog.csdn.net/xpwang/article/details/53427479> 窗体和控件的属性CreateParams(这真的是一个属性)很神奇, ...
- 微信小程序开发-窗体设置
"window": { "backgroundTextStyle": "light", "navigationBarBackgro ...
- FCC(ES6写法) Symmetric Difference
创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组. 给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2 ...
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
还是先上图吧,无图无真相 别以为真懂Openstack!先别着急骂我,我也没有说我真懂Openstack 我其实很想弄懂Openstack,然而从哪里下手呢?作为程序员,第一个想法当然是代码,Code ...
- 【kafka学习之五】kafka运维:kafka操作日志设置和主题删除
一.操作日志 首先附上kafka 操作日志配置文件:log4j.properties 根据相应的需要设置日志. #日志级别覆盖规则 优先级:ALL < DEBUG < INFO <W ...
- React Native 0.50版本新功能简介
React Native在2017年经历了众多版本的迭代,从接触的0.29版本开始,到前不久发布的0.52版本,React Native作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...
- [Swift]LeetCode232. 用栈实现队列 | Implement Queue using Stacks
Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

