学习总结:

流的分类
``` Java中定义了两种类型的流:字节流,和字符流。

字节流:处理字节的输入和输出。包括读写二进制数据等方面的内容。

字节流包含两个顶层抽象类:InputStream和OutputStream。

1:字节流的两个顶层类是抽象类,分别是:InputStream和OutputStream。

2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输 出。

抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和

write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。

字符流:处理字符的输入和输出。他采用的是Unicode编码,可以实现国际化。使用字符流的另外一个好处就是:字符流比字节流更有效率。

Java提供了Reader和Writer两个撰文操作字符流的类。


<table><tr><td bgcolor=yellow>字节-字符转换流</td></tr></table>

OutputStreamWriter和InputStreamReader
在整个IO包中,实际上就是字节流和字符流,但是除了这两个流之外,还存在一组字节流-字符流的转换类。
•OutputStreamWriter:是Writer的子类,将输出的字符流转换为字节流。即:将一个字节流的输出对象变为字节流的输出对象
•InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。


<table><tr><td bgcolor=yellow>FileInputStream 常用的构造方法主要有如下两种重载形式。</td></tr></table>

FileInputStream(File file):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name):通过打开一个到实际文件的链接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。


<table><tr><td bgcolor=yellow>字节流与字符流的区别</td></tr></table>

字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。

字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,
说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容。


<table><tr><td bgcolor=yellow>打印流</td></tr></table>

一:System类当中的方法:
System.in; 标准的输入流: 默认是键盘录入
System.out; 标准的输出流: 默认是输出到控制台。

System.setIn(InputStream in); 改变来源。
System.setOut(PrintStream ps);

二:PrintStrea PrintStream(File file)
创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(File file, String csn)

PrintStream(OutputStream out) ;
PrintStream(OutputStream out, boolean autoFlush) ;自动刷新。
PrintStream(String fileName)


<table><tr><td bgcolor=yellow>按操作方式分类结构图:</td></tr></table>
![](https://img2018.cnblogs.com/blog/1581881/201911/1581881-20191102232723382-1018418008.png)

<table><tr><td bgcolor=yellow>按操作对象分类结构图</td></tr></table>
![](https://img2018.cnblogs.com/blog/1581881/201911/1581881-20191102232748257-24121832.png)