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流的判别

判别流程

  1. 输入流 or 输出流
  2. 字节流 or 字符流
  3. 节点流 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>) =》 <mstyle mathcolor="&#35;ff0011"> B u f f e r e d O u t p u t S t r e a m </mstyle> {\color{#ff0011}{BufferedOutputStream}} BufferedOutputStream(<mark>输出字节处理流</mark> -> 处理=缓冲)
  • OutputStream(<mark>输出流字节流</mark>) =》 FileOutputStream(<mark>输出字节节点流</mark>) =》 <mstyle mathcolor="&#35;ff0011"> P r i n t S t r e a m </mstyle> {\color{#ff0011}{PrintStream}} 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);// 输出流、字符流、处理流(换行)


总结

《Java-IO流》https://blog.csdn.net/sinat_37064286/article/details/86537354#1%E3%80%81%E6%B5%81%E7%9A%84%E6%A6%82%E5%BF%B5%E5%92%8C%E4%BD%9C%E7%94%A8