[十九]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社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
随机推荐
- NOIP2008 立体图
题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...
- Caused by: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{}. Check syntax #{property|(expression), var1=value1, var2=value2, ...}
解决办法:查看与该项目中的所有#{},应该是 #{}的中间没有写值
- 关于H5的一些杂思细想(一)
作为一名前端程序媛,虽然整天和代码打交道,但是还是有一颗小清新的内心,虽然有时候加起班来不是人,但是空闲的时候还是会整理一下思绪,顺便整理一下自己,两个多月的加班,一直没有更新,今天就把自己最近做的一 ...
- Vue(三十二)SSR服务端渲染Nuxt.js
初始化Nuxt.js项目步骤 1.使用脚手架工具 create-nuxt-app 创建Nuxt项目 使用yarn或者npm $ yarn create nuxt-app <项目名> 注:根 ...
- EventBus学习笔记(一)
EventBus是Android和Java的发布/订阅事件总线 EventBus分三个步骤 1.定义事件 public static class MessageEvent { /* Additiona ...
- 10. vue axios 请求未完成时路由跳转报错问题
axios 请求未完成时路由跳转报错问题 前两天项目基本功能算是完成了,在公司测试时遇到了遇到了一个问题,那就是在请求未完成时进行路由跳转时会报错,想了几种办法来解决,例如加loading,请求拦截, ...
- 29 ArcMap许可服务器点击授权后无法进入下一步
系统描述:Windows server 2008 R2 ArcMap版本:10.6 系统要求各项都满足,包括补丁包都有,没有杀毒软件,ArcMap软件能安装上,但是到授权那步出问题 系统要求http ...
- Multi-Get API
multiGet API并行地在单个http请求中执行多个get请求. Multi-Get Request MultiGetRequest构造函数为空,需要你添加`MultiGetRequest.It ...
- socket 套接字服务器端和客户端发送信息
import socket import threading host='' port=6889 def cilenThred(conn,addr): print("成功接受客户端{}的连接 ...
- spring的配置和使用
spring的配置和使用 1. 创建基于java的配置. 配置极少量的XML来启用java配置: <?xml version="1.0" encoding="U ...

