目录
- 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
支持随意跳转到文件的任意位置进行读写