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