java io流的分类:
1、从io流的两大操纵数据的形式分类。input stream 、output stream
2、从io流的操纵的最细粒度分类。byte(stream)、char(Reader)。
3、从使用场景的角度分类。
过滤流的概念:
FilterInputStream :输入过滤流,此流的任何继承者都必须提供underlying input stream。
FilterOutputStream:输出过滤流,此流的任何继承着都必须提供数据输出的underlying output stream 。
类似的有:FilterReader,FilterWriter
其特殊之处:
关闭前,先刷新缓冲数据。(没搞懂sun 的公司的设计。既然不确定为缓冲流,为何这里这样实现)
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}
缓冲流的概念:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
缓存流的特点:可以提供一定程度的缓存,提高系统的稳定性和读写效率。
数据流的概念:
DataInput
DataInputStream extends FilterInputStream
DataOutput
DataOutputStream extends FilterOutputStream
缓存流的特点:实现了对underlying byte stream 按照数据的类型读和写。比如:读取int,byte等。
内存流的概念:
CharArrayReader extends Reader
CharArrayWriter extends Writer
ByteArrayInputStream extends InputStream
ByteArrayOutputStream extends OutputStream
内存流的特点:实现了对byte 和 char 的数组的流形式操作。
文件相关:
FileInputStream extends InputStream
FileOutputStream extends OutputStream
FileReader extends InputStreamReader
FileWriter extends OutputStreamWriter
文件流的特点:与文件相关,直接从文件中读取或者输出到文件中。文件流的读写与平台有关系,比如:一个文件是否允许多个对象同时写或者同时读,或者读和写交叉等待。
字节字符转换流:
OutputStreamWriter extends Writer
InputStreamReader extends Reader
特点:可以把从流中读取的byte流转换的字符流。比如文件操作中FileReader 和 FileWriter都继承了上述转换的流。
对象流
ObjectInput extends DataInput
ObjectInputStream extends InputStream implements ObjectInput
ObjectOutput extends DataOutput
ObjectOutputStream extends OutputStream implements ObjectOutput
特点:是实现byte流和java Object对象之间的转换功能。
管道流
PipedInputStream
PipedOutputStream
PipedReader
PipedWriter
特点:实现两个线程之间的数据的传输。
可回溯流
PushbackReader extends FilterReader
PushbackInputStream extends FilterInputStream
特点:可以回溯,就是读取字符后发现情况,可以回写到缓冲区,然后在读。当然回溯到缓冲区的数据,不会回写到 underlying stream
随机文件读取
RandomAccessFile
特点:这是一个可以随机读取文件数据的api。 (这个文件的锁机制很重要,需要特别注意)
其他:
PrintStream extends FilterOutputStream
class PrintWriter extends Writer
all over