IO流的分类
- 按数据流的方向分为输入流、输出流
输入、输出是相对于我们写的代码程序而言
- 输入流:从别的地方(本地文件,网络上的资源等)获取资源
- 输出流:从我们的程序中输出到别的地方
- 按处理数据单位不同分为字节流、字符流
字节流:每次读取(写出)一个字节 1Byte 、处理非字符文件 =》 音频,视频。。。
字符流:每次读取(写出)两个字节 1Word=2Byte。 处理字符文件 =》 文本
- 按功能不同分为节点流、处理流
节点流:从或向一个特定的地方(节点)读写数据。 如FileInputStream
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装.
Note:
- 单单“输入/输出流”无法实例化,必须通过“字节/字符流”作为连接(形成处理流),有需要的话再在外面嵌套“处理流”
- 看下面的图片就能看懂了!
IO流的判别
判别流程
- 输入流 or 输出流
- 字节流 or 字符流
- 节点流 or 处理流
IO流整理
1. 输入字节流
- InputStream(输入流字节) =》 FileInputStream(输入字节节点流) =》 BufferedInputStream(输入字节处理流 -> 处理=缓冲)
InputStream in = System.in; //输入流、字节流、节点流
new BufferedInputStream(System.in); //输入流、字节流、处理流
2. 输出字节流
- OutputStream(输出流字节流) =》 FileOutputStream(输出字节节点流) =》 (输出字节处理流 -> 处理=缓冲)
- OutputStream(输出流字节流) =》 FileOutputStream(输出字节节点流) =》 (输出字节处理流 -> 处理=打印)
OutputStream out = System.out; //输出流、字节流、节点流 (方便看,这里向上转型,原来是PrintStream)
new BufferedOutputStream(System.out); //输出流、字节流、处理流(缓冲)
new PrintStream(System.out); //输出流、字节流、处理流(换行)
3. 输入字符流
- Reader(输入字符流) =》 InputStreamReader (输入字符节点流) =》 BufferedReader(输入节点处理流)
//创建字符流实例,需要传入字节流实例
new InputStreamReader(System.in,"UTF-8"); //输入流、字符流、节点流 => 字符流有处理字符的功能
new BufferedReader(new InputStreamReader(System.in,"UTF-8")); //输入流、字符流、处理流(缓冲)
new Scanner(System.in)
只有BufferedReader 可以读行 readLine()
输出字符流
- Writer(输出字符流) =》 OutputStreamWriter(输出字节节点流) =》 BufferedWriter (输出节点处理流)
- OutputStreamWriter(输出字节节点流) =》 BufferedWriter (输出节点处理流)
//创建字符流实例,需要传入字节流实例
new OutputStreamWriter(System.out,"UTF-8"); //输出流、字符流、节点流 =》 字符流有处理字符的功能
new BufferedWriter(new OutputStreamWriter(System.out,"UTF-8")); //输出流、字符流、处理流(缓冲)
new PrintWriter(System.out);// 输出流、字符流、处理流(换行)