1.从不同角度分类:
•按流动方向的不同可以分为输入流( InputStream 和 Reader)和输出流(OutputStream 和 Writer)
•按处理数据的单位不同分为字节流(InputStream 和 OutputStream)和字符流(Reader 和 Writer)
•按功能的不同可分为节点流和处理流;
• 节点流:直接操作目标设备,例如:磁盘或一块内存区域。
• 处理流:通过操作节点流,从而间接完成输入或输出功能的流。处理流是的存在是建立在一个已经存在的输入流或输出流的基础之上的。
![](https://i-blog.csdnimg.cn/blog_migrate/ee760322fd90cb397a0eb3148f9c238c.jpeg)
InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。
如果以文件操作为例,则内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件中,读取时需要将读入的字节流通过InputStreamReader变为字符流
举例说明
//构建一个字节输出流对象
OutputStream out = newFileOutputStream("");
//把字节输出流转成字符输出流
Writer w = new OutputStreamWriter(out);
//然后的操作和使用字符输出流的操作一样
---------------------------------------------
//构建一个字节输入流对象
InputStream is = newFileInputStream("");
//把字节输入流转成字符输入流
Reader r = new InputStreamReader(is);
//然后的操作和使用字符输入流的操作一样