javaIO——StringReader & StringWriter
上一篇概述篇说过,一个IO对象是指一个可以被关闭的数据源或者目标,那么StringReader和StringWriter就是一个字符串源和字符串目标。
1. StringtReader:
文档说:StringReader 是一个数据源为string的字符流。它的实现也非常简单,内置了一个str字段,在构造函数中初始化这个字段,从ensureOpen方法可以看出,只要构造时的参数不为空,那么代表流已经打开,可以进行后续的读取操作了。
StringReader重写了父类的read方法:
从图中可以看出,StringReader读取的过程中,实际就是将位置指针标记后移,值得注意的两点是:
1.1. read方法都进行了同步,因为读取的过程中进行了指针后移的操作,不同步会导致重复读取或者跳读;
1.2. read都是将返回值-1作为流的结尾标志(事实上这也是整个java流家族通用的结束标致);
此外,StringReader还实现了 mark和reset方法,mark即是标记当前指针位置,reset即是将指针重置到标记位置。
2. StringWriter:
StringWriter是将一个StringBuffer对象作为输出目的地,并且可以在构造函数指定 buffer 的大小。StringWriter只是将数据写入到一个buffer对象中,而不是实质的物理介质,这个对象最后又可以转换成字符串(toString)。
StringWriter支持 write和append两种方法,区别在于,write方法返回空,而append方法返回流对象本身(也就是可以写成这种格式: append().append())。
其中,write方法参数支持单字符、字符数组、字符串,并且当参数为数组或者字符串时,可以指定范围(偏移量和取值长度):
append方法支持CharSequence对象和单个字符。
前面说read方法加了同步,为什么write和append却没有加呢?其实是因为:write和append方法最后都是调用了StringBuffer.append()方法,而它是同步的。
最新文章
- 安装wampserver时提示丢失MSVCR110.dll(在windows server上可用)
- AngularJS在IE8的支持
- DOM_02之查找及元素操作
- 初识React
- 使用 Windows10 自定义交互消息通知
- JS制作的简单的三级及联
- onclick控制元素显示与隐藏时,点击第一次无反应的原因
- Python Django manage.py提供的命令及用法
- hosts文件配置作用
- JS浏览器对象-Location对象
- 命名空间“System.Windows.Forms”中不存在类型或命名空间名称“DataVisualization”。是否缺少程序集引用?
- iOS 获取联系人,并调用系统地址簿UI
- 初识MySQL数据库的各种CMD命令窗口下的指令
- Chart Parser 中 Earley's 算法的应用
- Oracle_高级功能(4) 数据库存储结构
- linux系统查毒软件ClamAV
- C#调用Python脚本的简单示例
- swift的enum基础
- flash 跨域加载 二次加载
- Android仿联系人列表分组悬浮列表实现,自己定义PinnedHeaderListView实现
热门文章
- flutter中的异步机制 Future
- dnspy使用技巧
- C之静态内存和动态内存
- 超详细MySQL安装及基本使用教程
- 005-多线程-锁-JUC锁-LockSupport【使用、Unsafe、对比Object的wait、底层源码】
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_07-新增页面-前端-页面完善
- 上证50ETF申赎清单
- 深度学习中的Attention机制
- 使用STM32F103ZET霸道主板实现LCD显示屏显示