目录
- 1. 字节流
- 1-1. InputStream
- 1-2. outputStream
 
- 2. 字符流
- 2-1. Reader
- 2-2. Wirter
 
- 3. 字节缓冲流
- 3-1. BufferedInputStream(字节缓冲输入流)
- 3-2. BufferedOutputStream(字节缓冲输出流)
 
- 4. 字符缓冲流
- 5. 打印流
- 6. 随机访问流
1. 字节流
1-1. InputStream
InputStream 用于从源头(通常是文件)读取数据(字节信息)到内存中,java.io.InputStream抽象类是所有字节输入流的父类。
InputStream 常用方法:
- read():返回输入流中下一个字节的数据。返回的值介于 0 到 255 之间。如果未读取任何字节,则代码返回- -1,表示文件结束。
- read(byte b[ ]): 从输入流中读取一些字节存储到数组 b 中。如果数组 b 的长度为零,则不读取。如果没有可用字节读取,返回 -1。如果有可用字节读取,则最多读取的字节数最多等于 b.length , 返回读取的字节数。这个方法等价于- read(b, 0, b.length)。
- read(byte b[], int off, int len):在read(byte b[ ]) 方法的基础上增加了 off 参数(偏移量)和 len 参数(要读取的最大字节数)
- skip(long n):忽略输入流中的 n 个字节 ,返回实际忽略的字节数。
- available():返回输入流中可以读取的字节数。
- close():关闭输入流释放相关的系统资源。
常用的字节输入流:
- FileInputStream,根据指定的文件路径读取字节信息。
1-2. outputStream
OutputStream用于将数据(字节信息)写入到目的地(通常是文件),java.io.OutputStream抽象类是所有字节输出流的父类。
OutputStream 常用方法:
- write(int b):将特定字节写入输出流。
- write(byte b[ ]): 将数组b 写入到输出流,等价于 write(b, 0, b.length) 。
- write(byte[] b, int off, int len): 在write(byte b[ ]) 方法的基础上增加了 off 参数(偏移量)和 len 参数(要读取的最大字节数)。
- flush():刷新此输出流并强制写出所有缓冲的输出字节。
- close():关闭输出流释放相关的系统资源。
常用的字节输入流:
- FileOutputStream,写入字节信息到指定的文件中。
2. 字符流
2-1. Reader
常用的字符输入流:
- FileReader,读取字符信息到内存。
2-2. Wirter
常用的字符输出流:
- FilerWirter,写出字符信息
3. 字节缓冲流
IO 操作是很消耗性能的,可以使用缓冲流将数据加载至缓冲区,一次性读取/写入多个字节,从而避免频繁的 IO 操作,提高流的传输效率。
3-1. BufferedInputStream(字节缓冲输入流)
BufferedInputStream 父类是 FileInputStream
BufferedInputStream 从源头(通常是文件)读取数据(字节信息)到内存的过程中,不会一个字节一个字节的读取,而是会先将读取到的字节存放在缓存区,并从内部缓冲区中单独读取字节。这样大幅减少了 IO 次数,提高了读取效率。
BufferedInputStream 内部维护了一个缓冲区,这个缓冲区实际就是一个字节数组
3-2. BufferedOutputStream(字节缓冲输出流)
BufferedOutputStream 父类是 FileOutputStream
BufferedOutputStream 与 BufferedInputStream 类似
4. 字符缓冲流
BufferedReader (字符缓冲输入流)和 BufferedWriter(字符缓冲输出流)类似于 BufferedInputStream(字节缓冲输入流)和BufferedOutputStream(字节缓冲输入流),内部都维护了一个字节数组作为缓冲区。
5. 打印流
PrintStream 属于字节打印流,与之对应的是 PrintWriter (字符打印流)
System.out 实际是用于获取一个 PrintStream 对象,print方法实际调用的是 PrintStream 对象的 write 方法
6. 随机访问流
RandomAccessFile 支持随意跳转到文件的任意位置进行读写