目录
前言
Java定义了专门负责各种方式的输入输出,这些类都被放在java.io包中。其中,所有输入输出流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类。所有输出流都是抽象类OutputStream(字节输出流)或抽象类Write(字符输出流)的子类
输入流:InputStream/Reader
一、InputStream
InputStream是字节输入流的抽象类,是所有字节输入流的父类。
接下来描述:InputStream类的层次结构
顶层:InputStream:字节输入流的抽象类;
1.1 InputStream实现的接口
-
Closeable:
-
AutoCloseable:
1.2 InputStream直接子类
1.2.1 AudioInputStream
一个音频输入流是一个有指定音频格式和长度的输入流。
1.2.2 ByteArrayInputStream
一个字节数组输入流包含一个内部缓存,包含可能会从流中读取的的字节。通过read方法一个内部计数器持续跟踪下一个被提供的字节。
1.2.3 FileInputStream
文件输入流从一个文件系统的一个文件中获取输入流。哪些文件可用取决于主机环境。FileInputStream用于读取原始字节流,如图像数据。要读取字符流,请考虑使用FileReader。
1.2.4 FilterInputStream
一个过滤流包含一些其他输入流,过滤流使用这些输入流作为它的基本数据源,可能会在这个过程中转换数据或者提供额外的功能。
FilterInputStream直接子类:
- BufferedInputStream:缓冲输入流向另一个输入流添加功能,即缓冲输入并支持标记和重置方法的能力。
- CheckedInputStream:一种输入流,它也维护正在读取的数据的校验和。校验和可用于验证输入数据的完整性。
- CipherInputStream:密码输入流由一个输入流和一个密码组成,因此read()方法返回的数据是从底层输入流读入的,但已由密码进行了额外处理。密码在被密码输入流使用之前必须完全初始化。
- DataInputStream:一个DataInputStream允许【应用程序】以独立于机器的方式从底层输入流中读取基本的Java数据类型。应用程序使用DataOutputStream写入数据,这些数据以后可以由DataInputStream读取。
- DeflaterInputStream:实现一个输入流过滤器,用于以“deflate”压缩格式压缩数据。
- DigestInputStream:一种透明(transparent)的流,使用流经该流的位来更新相关的信息摘要。
- InflaterInputStream:这个类实现了一个流过滤器,用于以“deflate”压缩格式解压缩数据。它还被用作其他解压缩过滤器的基础,如GZIPInputStream。
- LineNumberInputStream:这个类是一个输入流过滤器,它提供了跟踪当前行号的附加功能。
- ProgressMonitorInputStream:监控从某些输入流读取的进度。该ProgressMonitor通常以大致如下形式调用:
InputStream in = new BufferedInputStream( new ProgressMonitorInputStream( parentComponent, “Reading”+filename, new FileInputStream(fileName))); // 这将创建一个进度监视器来监视读取输入流的进度。
- PushbackInputStream:PushbackInputStream 通过将推回的字节存储在内部缓冲区中,加入功能到另一个输入流,即“push back”和“unread”bytes的能力。这在方便片段读取由特定字节限定的无限数量的数据的字节的情况下很有用;读取终止字节后,代码片段可以“未读”它。
1.2.5 ObjectInputStream
ObjectInputStream反序列化