Java学习笔记:如何区分节点流和处理流

这篇文章是对自己学习的一个总结


节点流和处理流概述

Java流可以分节点流和处理流两类。

节点流是面向各种物理节点的流,比如面向读写文件的FileInputStream和FileOutputStream;面向对象的ObjectInputStream和ObjectOutputStream等等。

处理流则需要依附于节点流,用来对节点流的功能进行拓展和加强。比如BufferedInputStream,用它来包装FileInputStream(或者其他的节点输入流也一样)以后 ,直接调用BufferedInputStream的read方法,这个read方法的效果和FileInputStream的read方法的效果相比,就多出来一个缓存的功能。

我一开始学的时候能理解处理流和节点流的概念,但是实际写代码的时候,查一下文档发现Java IO流的类种类繁多,乍一看根本不知道哪些是节点流哪些是处理流。这不能很好地理解Java IO体系。学习一段时间以后,今天就来记录学习所得。


装饰模式

对装饰模式还不了解的,一定要看这篇文章Java设计模式:装饰模式。理解装饰模式和UML类图,才能懂下面的内容。

装饰模式的UML图如下所示
在这里插入图片描述

其中Decorator是装饰类,而ConcreteComponent是主体类。装饰类和主体类的区别就是装饰类与接口有聚合关系,而主体类没有(聚合关系如下面的代码所示)

class Decorator{
    //成员变量是Component,即Decorator有一部分是由Component组成的,这表示聚合关系
    private Component component;
}

理解装饰模式的话,就知道这个区别让主体类可以被装饰类装饰,而装饰类不能被主体类装饰。

在Java IO中,正好有一个类FilterXXX类符合装饰类的特征,而其他节点流符合主体类的特征。我们看一下下面的UML类图
在这里插入图片描述

上图中,节点流是ObjectInputStream和FileInputStream,而FilterInputStream是装饰类,继承于Filter的DataInputStream和BufferedInputStream是装饰类的具体实现类。

所以,所有继承于FilterInputStream或FilterOutputStream的类都是处理流,而其他的则是节点流。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值