Java 输入输出流


1.什么是I/O

Java中I/O操作主要是指使用Java进行输入,输出操作。 Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。

那么什么是数据流呢?

2.数据流

在《think in Java》中,是这样解释的流:

“流是磁盘或其它外围设备中存储的数据的源点或终点。”

流是一组有始有终,并且有序的数据序列组合。它包括输入流、输出流。

输入流和输出流,在我一开始学习的时候,真的是搞不懂,特别容易混淆。特别是字符流中的read和

write,根据英文意思老是理解错误。自从在网上看过两幅图之后,彻底的理解了。

输入流

程序从输入流读取数据源。数据源包括外界(键盘、文件、网络…),即是将数据源读入到程序的通信通道。

Java 输入输出流_第1张图片
通过图片,很容易看出,数据是从外存通过流读入到了内存中。

输出流

程序向输出流写入数据。将程序中的数据输出到外界(显示器、打印机、文件、网络…)的通信通道。

输出流

通过图片,也很容易看出,数据是从内存通过流写入到了外存中。

注:采用数据流的目的就是使得输出输入独立于设备。

3.I/O体系结构

直接上图:

体系结构

图上可以看出,在Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;另外上图未指出的一个接口指的是Serializable。

再上一图,看一下整个数据流中的API结构和对象继承关系信息:

根据操作对象的不同,流分为了字符流和字节流。
字节流读取时,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个字节(汉字的字节数是2个,UTF-8码表中是3个)时,先查指定的编码表,然后将查到的字符返回。
字节流可以处理所有类型数据,如图片,音频,视频。而字符流只能处理字符数据。

那么首先,先看一下字符流:

字符流

前面也说了,字符流的原理是基于字节流的读取,然后查指定的编码表,再返回字符。

字符流的两个顶级父类是Read、Write。

Reader中的常见的方法:

1.int read():读取一个字符。返回的是读到的那个字符。如果读到流的末尾,返回-1.
2.int read(char[]):将读到的字符存入指定的数组中,返回的是读到的字符个数,也就是往数组里装的元素的个数。如果读到流的末尾,返回-1.
3,close():读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放.

Writer中的常见的方法:

1.write(ch): 将一个字符写入到流中。
2.write(char[]): 将一个字符数组写入到流中。
3.write(String): 将一个字符串写入到流中。
4.flush():刷新流,将流中的数据刷新到目的地中。
5.close():关闭资,在关闭前会先调用flush(),刷新流中的数据的目的地,然后关闭。

未完待续

你可能感兴趣的:(java,java)