专栏首页noteless[二十三]JavaIO之PushbackReader

[二十三]JavaIO之PushbackReader

功能简介

PushBackReader允许将字符推回到流的字符流 reader

PushBackReader 是一个装饰器模式最寻常的样子FilterReader 是抽象的装饰器模式 DecoderReader是抽象构建 ComponentPushbackReader是具体的装饰器类 ConcreteDecoder其他的具体的Reader的子类,则是需要具体装饰的对象

FilterReader就是为了抽象的Decorator而存在的它内部有一个Reader in 然后所有的其他方法都是无差别的转发到了in上有兴趣的可以过去看下源码(1.8 如此)

还记得PushBackInputStream中的原理么?

内部维护了一个数组,用来保存记录 被回退掉的数据

PushBackReader的原理也是一样的

对照下字段就可以发现端倪

同PushBackInputStream 一样,他也是从后往前存放的

初始时,缓冲区为空 pos == length

随着元素的增加,pos的位置往前移动

缓冲区一旦写满,将会抛出异常

总结

PushBackReader 与 PushBackInputStream实现的原理是一样的

而且,而且,里面的很多方法的代码(jdk1.8下)

都是几乎一样的,都是几乎一样的,都是几乎一样的

本文说的有些粗,因为很多代码逻辑同PushBackInputStream

所以有兴趣的,请参看之前PushBackInputStream 的介绍

如果不想深入,只需要清楚:

PushBackReader 是使用了装饰器模式

内部有一个缓存区用来存储被回退掉的内容

如果内容满了不支持继续回退写缓存,会抛出异常 

读取的时候先从这个回退的缓冲区中读取数据,然后再考虑从流中读取

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [翻译]Java 6,7,8中的String.intern

    最近一直在关注“故障排查”的相关知识,首先着手的是OOM的异常。OOM异常通常会有Perm区的OOM(java7及以前)和HeapSpace的OOM,这两种各有...

    LNAmp
  • 聊聊Java进阶之并发基础技术—线程池剖析

    在JDK中,J.U.C并发包下的ThreadPoolExecutor核心类是一种基于Executor接口的线程池框架,将任务提交和任务执行解耦设计,其中Exec...

    用户2991389
  • Spring Retry 学习记录

    在很多场景中,我们需要“重试”,重试意味着反复执行一段代码直至成功,或者重试多次无果后标记失败。“重试”的出发点有可能是为了保持状态的一致,也有可能是为了容忍被...

    LNAmp
  • ClassNotFoundException,NoClassDefFoundError,NoSuchMethodError排查

    在使用java开发的过程中时常会碰到以上三个错误,其中NoClassDefFoundError、NoSuchMethodError两个error遭遇得会多一些。...

    LNAmp
  • [翻译]如何分析Java线程dumps

    这是关于故障诊断文章的第二篇,翻译自《How to Analyze Java Thread Dumps》,原文地址:https://dzone.com/arti...

    LNAmp
  • 三重Des对称加密在Android、Ios 和Java 平台的实现

    如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android、ios、java平台的使用方法;

    freesan44
  • Spring源码初探-IOC(1)-Bean的初始化

    对于一名Java码农来说,Spring真是太重要了。目前Spring的体系已经发展得非常壮大,其底层基石core,beans,context非常牢固。

    LNAmp
  • Hadoop1.2.1 WordCount Java 实现方式

    1.编写java程序用到的jar包,如下截图,其实貌似只需要一个hadoop-core-1.2.1.jar就可以了,这个jar包在Hadoop的减压目录下

    用户2992598
  • 使用ASM实现简单的AOP

    之前一直使用greys及其内部升级二次开发版来排查问题。最近周末刚好事情不多,作为一名程序员本能地想要弄懂这么神奇的greys到底是怎么实现的?周末从githu...

    LNAmp
  • Java高效分割字符串

    最近优化一段代码的调用时间,发现性能瓶颈居然是io和split!io操作慢情有可原,那么对于split有没有更高效的方法呢?

    weishu

扫码关注云+社区

领取腾讯云代金券