流
流的概念
在Java中所有数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称和抽象。数据在两设备间的传输称为流。
l流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
流的分类
按照流向分:输入流、输出流
按照处理数据的单位分:字节流(8位的字节);字符流(16位的字节)
Java中IO流的分类:
- 字节、字符流:InputStream、OutputStream字节流,Writer、Reader字符流
- 输入、输出:Input输入,Output输出,Writer输出,Reader输入
- 文件:带File的IO类,作为文件操作的IO流
- 二进制数组:ByteArray
- java对象:Object
- 特殊的:
PrintWriter表示打印输出到某个设备
Scanner表示接收某个设备的输入
StringWriter
StringReader
输入输出流
输入流
输入就是将数据从各种输入设备(包括文件、键盘等)读取到内存中。
输入流模式
输出流
输出则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。
输出流模式
例如:键盘是一个输入设备,显示器是一个输出设备。文件既可以作为输入设备,又可以作为输出设备
字节流与字符流
File类不支持文件内容处理,如果要处理文件内容,必须要通过流的操作模式来完成。
在java.io包中,流分为两种:字节流与字符流
- 字节流:数据流中最小的数据单元是字节。InputStream、OutputStream
- 字符流:数据流中最小的数据单元是字符。Java中的字符是Unicode编码,一个字符占用两个字节。Reader、Writer
字节流
FileInputStream和FileOutputStream
方法 | 解释 |
---|---|
FileInputStream(File file) | 通过打开与实际文件的连接一个FileInputStream,该文件是由文件系统中的File对象file命名 |
FileInputStream(String name) | 通过打开与实际文件连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名 |
- FileInputStream从文件系统中的某个文件中获得输入字节
- FileInputStream用于读取诸如图像数据之类的原始字节流
方法 | 解释 |
---|---|
FileOutputStream(File file) | 创建文件输出流以写入由指定的File对象表示的文件 |
FileOutputStream(String name) | 创建文件输出流以指定的名称写入文件 |
字节缓冲流
方法 | 解释 |
---|---|
BufferedInputStream(InputStream in) | 创建一个BufferedInputStream并保存其参数,输入流in,供以后使用 |
BufferedInputStream(InputStream in, int size) | 创建BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流in,以供以后使用 |
BufferedOutputStream(OutputStream out) | 创建一个新的缓冲输出流,以将数据写入指定的底层输入流 |
BufferedOutputStream(OutputStream out, int size) | 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流 |
字符流
字符流FileReader和FileWriter
FileReader是用于读取字符流
方法 | 解释 |
---|---|
FileReader(File file) | 创建一个新的FileReader,给出File读取 |
FileReader(String fileName) | 创建一个新的FileReader,给定要读取的文件的名称 |
FileWriter是用于写入字符流
方法 | 解释 |
---|---|
FileWriter(File file) | 给一个File对象构造一个FileWriter对象 |
FileWriter(String fileName) | 构造一个给定文件名的FileWriter对象 |
字符缓冲流BufferedReader和BufferedWriter
方法 | 解释 |
---|---|
BufferedReader(Reader in) | 创建使用默认大小的输入缓冲区的缓冲字符输入流 |
BufferedReader(Reader in, int sz) | 创建使用指定大小的输入缓冲区的缓冲字符输入流 |
BufferedWriter(Writer out) | 创建使用默认大小的输出缓冲区的输出字符流 |
BufferedWriter(Writer out, int sz) | 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区 |
字符流与字节流的对比
1、字节流操作的基本单元是字节;字符流操作的基本单元为Unicode码元。
2、字节流在操作的时候本身不会用到缓冲区的,是与文件本身直接操作的;而字符流在操作的时候使用到缓冲区的。
3、所有文件的存储都是字节(byte)的存储,在磁盘上保留的是字节。
4、在使用字节流操作中,即使没有关闭资源(close方法),也能输出;而字符流不使用close方法的话,不会输出任何内容。
字符字节转换流
方法 | 解释 |
---|---|
InputStreamReader(InputStream in) | 创建一个使用默认字符集的InputStreamOlder |
InputStreamReader(InputStream in, Charset cs | 创建一个使用给定字符集的InputStreamReader |
OutputStreamWriter(OutputStream out) | 创建一个默认字符编码的OutputStreamWriter |
OutputStreamWriter(OutputStream out, Charset cs) | 创建一个给定字符集的OutputStreamWriter |