1. 序言
Java输入输出涉及的概念比较多,涉及的类也很多,很容易搞混,所以还是非常有必要梳理下的。
2. 流
Java语言的输入和输出是基于流(stream)的,所谓的流很好理解,就是向水一样向数据源中淌入数据,特点是一滴一滴的(从根本上讲是一个二进制位一个二进制位的)。
流最基本的分为输出流和输入流,输出流就是向数据源写入数据,输入流就是从数据源读取数据。
3. 输出流和输入流
Java位输入流和输出流定义了抽象基类如下。
public abstract class OutputStream
public abstract calss InputStream
1
2
至于为啥定义抽象基类,因为在不确定数据源(来自屏幕?文件?网络?)的情况下,我们并不知道输出流和输入流如何具体实现,但是我们知道输出流和输入流应该能干啥,所以定义抽象基类。这样有个很大的好处,就是我们只需要知道基类的方法,就知道各种输入流和输出流实现类的操作方法,这就是继承、多态的好处!
可以用屁股想想,输出流应该有write方法、输入流应该有read方法,哈哈。
4. 过滤器流
过滤器流名字非常形象,就是在输入、输出流上加了一个过滤的玩意。例如,可以对流中的数据加密、解密。
5. 阅读器和书写器
阅读器和书写器其实也是过滤器流的一种,因为程序中读写文本(字符串)是一种非常常用的功能,在读写文本的时候,涉及字符编码的一些情况,阅读器和书写器就是一种特殊的针对各种编码的文本都能轻易读写的过滤器流。