当前位置: 首页 > news >正文

[十七]JavaIO之CharArrayReader 和 CharArrayWriter


功能简介

CharArrayReader  和 CharArrayWriter, 字符数组作为数据源的字符读写 

CharArrayReader 
CharArrayWriter 
只需要记住他们的根本, CharArray 是数据源的形式
读 CharArrayReader 需要接受一个字符数组作为参数    就是从CharArray 中读,所以需要一个字符数组
写 CharArrayWriter  就是写入到一个CharArray 中去,所以 它内部维护了一个字符数组
显然, 字符数组都是内存中的数据

他们的逻辑类似ByteArrayInputStream ByteArrayOutputStream,只不过一个是字节,一个是字符而已
看下字段对照,相比就能对于实现过程了解一二

CharArrayReader

要始终记着Reader的常规约定方法
read 读取一个字符或者读取字符到数组
mark
reset
markSupported
标记点相关 ready 类似available true 则保证不会阻塞,false则不保证一定阻塞 close 关闭流


构造方法

构造方法的本质就是  CharArrayReader的原理
从一个字符数组中读取数据,这个字符数组通过构造方法传入
注意:
字节数组不是复制而来的,引用直接指向

使用char buf[] 作为数据源 使用char buf[]中, off偏移量开始,  length长度个字符
作为数据源

read

提供了两个版本的read
读一个字符
或者读取字符 到指定的字符数组中的指定位置



标记功能

CharArray作为数据源,本身就是内存中的数据
所以只需要标志点,可以随意切换
自然支持标记功能

close

close方法没有太多实际的事情要做
只是缓冲区置空


CharArrayWriter


writer的常规约定
write 将指定的的字符 字符序列 String ,写入 append 追加指定的内容 flush 刷新 close 关闭

构造方法


CharArraywriter 内部维护了一个字符数组
构造方法主要就是对他进行初始化
默认大小是32
缓冲区会随向流中写入数据而自动增长
在调用write方法过程中
一旦大小超过,将会通过Arrays.copyOf  进行自动增长
增长是创建另外一个数组,原始数据全部拷贝过去
char buf[]
是实际存储数据的内部数组
count即是大小,也是下一个将要写入数据的下标索引

所以想要知道大小,直接返回count
想要重置缓冲区,直接count清零,下次从头开始写入即可

write方法

提供了三个版本的write

将指定内容写入输出流缓冲区   


public void write(int c) 将一个字符写入内部缓冲区 public void write(char c[], int off, int len) 将指定的len个字符写入内部缓冲区 public void write(String str, int off, int len) 将字符串的某一部分写入内部缓冲区

writeTo


将缓冲区内的内容写入到另外的字符流
过程很简单,直接调用参数out的write方法

flush 和close

flush 和close在字符输出流中并没有什么好做的


总结

CharArrayReader  和 CharArrayWriter, 字符数组作为数据源的字符读写
逻辑是类似ByteArrayInputStream ByteArrayOutputStream 的

只需要记住CharArrayReader 接受一个CharArray 从这里面读,,read操纵的都是这个字符数组
CharArrayWriter内部有一个CharArray  数据是写入到他们里面的即可,write操纵的是内部的字符数组



相关文章:

  • 域账号加到本机管理员组和本机Power Users组
  • vue router跳转方法
  • weblogic修改应用服务器启动密码
  • 嵌入式开发常用的一些命令
  • 数据结构 - 树
  • 別再把沒時間學習當藉口
  • Python学习笔记(2)——第一个Python程序
  • Asp.net下C#调用Word功能的实例与总结
  • 利用的Google的vision library实现人脸检测功能
  • C语言读写伯克利DB 3
  • Java并发编程J.U.C之Condition
  • Git 2.19 对Diff、Branch和Grep等做了改进
  • Web服务器配置解析
  • Alibaba Arthasa相关
  • hbase基础shell操作
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 4. 路由到控制器 - Laravel从零开始教程
  • java8-模拟hadoop
  • Java应用性能调优
  • Java知识点总结(JavaIO-打印流)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • vue中实现单选
  • 初识MongoDB分片
  • 力扣(LeetCode)56
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 数据结构java版之冒泡排序及优化
  • 网页视频流m3u8/ts视频下载
  • 新版博客前端前瞻
  • elasticsearch-head插件安装
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #单片机(TB6600驱动42步进电机)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (算法)Travel Information Center
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)VirtualBox安装增强功能
  • (转) Android中ViewStub组件使用
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .a文件和.so文件
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET下ASPX编程的几个小问题
  • .Net语言中的StringBuilder:入门到精通
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • ??eclipse的安装配置问题!??
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [20161214]如何确定dbid.txt
  • [20180224]expdp query 写法问题.txt
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)