Java 学习笔记 - IO篇:常见的流Stream通道Channl以及相互关系
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 学习笔记 - IO篇:常见的流Stream通道Channl以及相互关系相关的知识,希望对你有一定的参考价值。
Java 学习笔记 - IO篇:常见的【流Stream】【通道Channl】以及相互关系
常见流
★
流的分类
分类方式 | 说明 |
---|---|
顶层规划 | 抽象基类 :作为所有流 的抽象基类 ,定义流 操作的API 接口;功能流抽象基类 :啥都没做,所有方法直接调用父类。设计意图:作为所有功能类 的基类 ,大它都继承它去扩展。 |
按方向 | 输入流 :将数据读进内存;输出流 :从内存当数据向外写出到目标位置。如:磁盘、网络。 |
按数据类型 | 字节流 :读写字节数据;字符流 :读写字符数据。(底层还是字节流) |
按功能 | 节点流 :从特定数据源读写数据;处理流 :为节点流 添加具体的处理能力 。 |
节点流
文件流
:从文件
生成流。随意读写文件流
:从文件
生成流,并且能读能写,随便指定读写从哪开始。数组流
:从数组
生成流。管道流
:从管道
生成流。字符流
:其源为一个字符串
的字符流。为字符串提供流式读写
的能力。
处理流
包装流(缓冲流、处理流)
:封装抽象基类流
的实现
。- 默认带一个
8192
的字节
或字符
数组作为缓冲区
。 - 继承
处理流-抽象基类
,并且包装一个流-抽象基类
的实现类。 - 因为有缓冲区,获得
mark、reset
能力。
- 默认带一个
转换流
:把字符流
封装为字符流
,此过程可以指定字符集
。其他处理流
:针对具体功能的处理。
流之间的关系
- 从流的名字可以看出:
大多数流有方向
。很多流是成对出现
的,它们经常会配合使用。 - 从设计角度看,类之间通过层层包装来针对具体需求增强功能
- 常规
读字节
我们一般用BufferedInputStream
。
FileInputStream fis = new FileInputStream("E:\\\\in.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
- 常规
读字符
我们一般用BufferedReader
。
FileInputStream fis = new FileInputStream(new File("E:\\\\in.txt"));
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
流的基本操作
读操作
流-抽象基类InputStream
orOutputStream
定义的标准读操作
所有读取流都支持。
其他处理流
,不过是在此基础上提供针对特定操作的便捷方法。比如:ObjectInputStream
支持按类型读取
变量。BufferedReader
支持按行读取
。
操作 | 说明 |
---|---|
abstract int read() | 从输入流中读取数据的下一个字节/字符 。 |
int read(T[] b) | 从输入流中读取一定数量的字节/字符 ,并将其存储在缓冲区数组 b 中。 |
int read(T[] b, int off, int len) | 将输入流中最多 len 个数据字节/字符 读入数组 。 |
写操作
操作 | 说明 |
---|---|
abstract void write(int b) | 将指定的字节/字符 写入此输出流。 |
void write(byte[] b) | 将 b.length 个字节从指定的 字节/字符 数组写入此输出流。 |
void write(byte[] b, int off, int len) | 将指定 字节/字符 数组中从偏移量 off 开始的 len 个字节写入此输出流。 |
void flush() | 刷新 此输出流并强制写出 所有缓冲的字节/字符 。 |
mark、reset 操作
mark、reset
是针对缓冲区来工作的,所以只有存在缓冲区
的流才可能支持此操作。
操作 | 说明 |
---|---|
void mark(int readlimit) | 在此输入流中标记当前的位置。 |
void reset() | 将此流重新定位 到最后一次 对此输入流调用 mark 方法时的位置。 |
boolean markSupported() | 测试此输入流是否支持 mark 和 reset 方法。 |
long skip(long n) | 跳过和丢弃此输入流中数据的 n 个字节/字符 。 |
检测、判断
操作 | 说明 |
---|---|
int available() | 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节/字符 数。 |
void close() | 关闭此输入流并释放与该流关联的所有系统资源。 关闭 外层流 会自动关闭它包装的内层流 。其实 Java7 之后,建议直接放 try(Closeable) 里。 |
通道
参考资料
笑虾:Java 学习笔记 - 文件IO篇:读写文本文件txt
笑虾:Java 学习笔记 - 复制文件
以上是关于Java 学习笔记 - IO篇:常见的流Stream通道Channl以及相互关系的主要内容,如果未能解决你的问题,请参考以下文章
Java 学习笔记 - IO篇:对象流 ObjectInputStreamObjectOutputStream