深入理解JAVA IO系列零:流概念详解

什么是流

JAVA程序通过流来完成输入/输出。流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方式。这样就意味一个输入流能够抽象多种不同类型的输入:从磁盘文件、从键盘或从网络套接字;同样,一个输出流可以输出到控制台、磁盘文件或相连的网络。

《深入理解JAVA IO系列零:流概念详解》

在我们平时接触的输入/输出流中,有这样一个概念必须要弄明白,何谓输入、何谓输出?讨论这个问题的前提是要知道以什么为参考物,这个参考物就是程序或者内存。输入:就是从磁盘文件或者网络等外部的数据流向程序或者内存。输出就是相反的过程。其中这个“外部”可以是很多种介质:

1、本地磁盘文件、远程磁盘文件。
2、数据库链接
3、TCP、UDP、HTTP网络通信
4、进程间通信
5、硬件设备(键盘、串口)

流的分类

《深入理解JAVA IO系列零:流概念详解》

1、从功能上:输入流、输出流

2、从结构上:字节流、字符流

3、从来源上:节点流、过滤流

其中InputStream/OutputStream是为字节流而设计的,Reader/Writer是为字符流而设计的。处理字节或者二进制对象使用字节流,处理字符或者字符串使用字符流。

在最底层,所有的输入/输出都是字节形式的,基于字符的流只在处理字符的时候提供方便有效的方法。

节点流是从特定的地方读写的流,例如磁盘或者内存空间,也就是这种流是直接对接目标的。

过滤流是使用节点流作为输入输出的,就是在节点流的基础上进行包装,新增一些特定的功能。

《深入理解JAVA IO系列零:流概念详解》

还有一个特殊流
序列化流:SequenceInputStream。(继承自InputStream)

使用对象流需要实现Serializable接口,否则会报错。而若用transient关键字修饰成员变量,不写入该成员变量,若是引用类型的成员变量为null,值类型的成员变量为0.

重点:

1.Java IO是采用的是装饰模式,即采用处理流来包装节点流的方式,来达到代码通用性。

2.处理流和节点流的区分方法,节点流在新建时需要一个数据源(文件、网络)作为参数,而处理流需要一个节点流作为参数。

3.处理流的作用就是提高代码通用性,编写代码的便捷性,提高性能。

4.节点流都是对应抽象基类的实现类,它们都实现了抽象基类的基础读写方法。其中read()方法如果返回-1,代表已经读到数据源末尾。

参考

深入理解JAVA I/O系列二:字节流详解

Java IO流体系中常用的流分类

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注