io 3.0 java 流的分类

Java的IO流分为输入流和输出流,依据流向,从内存到硬盘为输出流,反之为输入流。字节流和字符流以数据单位区分,字节流处理字节,字符流处理字符。此外,还有节点流与处理流,节点流直接连接IO设备,处理流则用于包装节点流,提供更高级的操作。处理流体现了装饰器设计模式,允许灵活地访问不同数据源。
摘要由CSDN通过智能技术生成

按照不同的分类方式,可以将流分为不同的类型。

1.输入流和输出流

按照流的流向来分,可以分为输入流和输出流。

  • 输入流:只能从中读取数据,而不能向其写入数据。
  • 输出流:只能向其写入数据,而不能从中读取数据。

此处的输入、输出涉及一个方向问题,数据从内存到硬盘,通常称为输出流——也就是说,这里的输入、输出都是从程序运行所在内存的角度来划分的。

提示: 划分输入/输出流时是从程序运行所在内存的角度来考虑的,从硬盘到内存为输入流,从内存到硬盘为输出流

对于下图所示的数据流向,数据从服务器通过网络流向客户端,在这种情况下,Server端的内存负责将数据输出到网络里,因此Server端的程序使用输出流;Client端的内存负责从网络里读取数据,因此Client端的程序应该使用输入流。
在这里插入图片描述

一切以内存为基准

java 的输入流主要是由 InputStream 和 Reader 作为基类,而输出流则主要是由 OutputStream 和 Writer 作为基类。他们都是一些抽象基类,无法直接创建实例。

public abstract class InputStream implements Closeable
public abstract class OutputStream implements Closeable, Flushable

public abstract class Reader implements Readable, Closeable
public abstract class Writer implements Appendable, Closeable, Flushable

2.字节流和字符流

字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同——字节流操作的是字节(8位),而字符流操作的是字符(16位)。(一个字节8位,一个字符是两个字节)

字节流主要由InputStream和OutputStream作为基类,而字符流则主要由Reader和Writer作为基类。

3.节点流和处理流

按照流的角色来分,可以分为节点流和处理流。
可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,称为节点流,节点流也被称为低级流(Low Level Stream)。
节点流示意图:
在这里插入图片描述
从上图中可以看出,当使用节点流进行输入/输出时,程序直接连接到实际的数据源,和实际的输入/输出节点连接。

处理流则用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能,处理流也被称为高级流。
下图显示了处理流示意图:
在这里插入图片描述
从上图中可以看出,当使用处理流进行输入/输出时,程序并不会直接连接到实际的数据源,没有和实际的输入/输出节点连接。使用处理流的一个明显好处是,只要使用相同的处理流,程序就可以采用完全相同的输入/输出代码来访问不同的数据源,随着处理流所包装节点流的变化,程序实际所访问的数据源也相应地发生变化。

提示:
实际上,Java使用处理流来包装节点流是一种典型的装饰器设计模式,通过使用处理流来包装不同的节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入/输出功能。因此处理流也被称为包装流。

上一节:IO流
下一节:流的概念模型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值