上一篇概述篇说过,一个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()方法,而它是同步的。

  

最新文章

  1. 安装wampserver时提示丢失MSVCR110.dll(在windows server上可用)
  2. AngularJS在IE8的支持
  3. DOM_02之查找及元素操作
  4. 初识React
  5. 使用 Windows10 自定义交互消息通知
  6. JS制作的简单的三级及联
  7. onclick控制元素显示与隐藏时,点击第一次无反应的原因
  8. Python Django manage.py提供的命令及用法
  9. hosts文件配置作用
  10. JS浏览器对象-Location对象
  11. 命名空间“System.Windows.Forms”中不存在类型或命名空间名称“DataVisualization”。是否缺少程序集引用?
  12. iOS 获取联系人,并调用系统地址簿UI
  13. 初识MySQL数据库的各种CMD命令窗口下的指令
  14. Chart Parser 中 Earley's 算法的应用
  15. Oracle_高级功能(4) 数据库存储结构
  16. linux系统查毒软件ClamAV
  17. C#调用Python脚本的简单示例
  18. swift的enum基础
  19. flash 跨域加载 二次加载
  20. Android仿联系人列表分组悬浮列表实现,自己定义PinnedHeaderListView实现

热门文章

  1. flutter中的异步机制 Future
  2. dnspy使用技巧
  3. C之静态内存和动态内存
  4. 超详细MySQL安装及基本使用教程
  5. 005-多线程-锁-JUC锁-LockSupport【使用、Unsafe、对比Object的wait、底层源码】
  6. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化
  7. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_07-新增页面-前端-页面完善
  8. 上证50ETF申赎清单
  9. 深度学习中的Attention机制
  10. 使用STM32F103ZET霸道主板实现LCD显示屏显示