对于流的概念,感受晦涩难懂,根据我的的理解,整理下,以及一些经常使用的流java
咱们举个场景,从迅雷的服务器上,下载一部电影,大概的过程是,迅雷硬盘读取到内存,经过网络传输,到本地电脑内存,再由本地电脑,持久化到本地硬盘,这就是流,之因此叫流,由于像水流同样,如上图git
1 按照流的方向而言:输入流 输出流api
输入输出是相对于内存而言的,从内存中出来的就是输出流,到内存中的就是输入流服务器
输入流又叫作InputStream,输入也叫作读 Read 输出流又叫作OutputStream,输出也叫写 Write网络
这句话很重要,必定是先读出来在写,因此输入流叫读,输出流叫写spa
2 按照读取数据方式不一样:字节流 字符流.net
字节流按字节方式读取 字符流按字符方式读取(一次两个字节)日志
字节流适合读取:视频 声音 图片 等二进制的文件(微软的doc文件,不是纯文本,包括格式等)视频
字符流适合读取:纯文本文件对象
java 语言中,全部的字节流都是以Stream结尾 全部的字符流都是以Reader或Writer结尾
java.io.* (重点掌握这16个) FileInputStream ----------------读取文件 | 字节 | 输入 FileOutputStream ---------------读取文件 | 字节 | 输出 FileReader ---------------------读取文件 | 字符 | 输入 FileWriter----------------------读取文件 | 字符 | 输出 BufferedInputStream ------------带有缓冲区 | 字节 | 输入 BufferedOutputStream------------带有缓冲区 | 字节 | 输出 BufferedReader------------------带有缓冲区| 字符 | 输入 BufferedWriter------------------带有缓冲区| 字符 | 输出 InputStreamReader--------------转换流(字节流转换成字符流) OutputStreamWriter-------------转换流(字节流转换成字符流) DateInputStream-----------------专门读取数据 ,连同数据类型一同读取(两个一块儿使用) DateOutputStream----------------专门读取数据 ,连同数据类型一同写入(两个一块儿使用) ObjectInputStream---------------专门读取java对象,反序列化 ObjectOutputStream--------------专门读取java对象,序列化 PrintWriter PrintStream -------------------标准的输出流(输出到控制台),与日志打印功能密切相关
咱们参考jdk文档画出UML类图 :http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
InputStream OutputStream Reader Writer (java中的流四你们族)
InputStream OutputStream
flush 仅仅针对输出流,意思是把剩余的东西一点不剩的输出,好比一桶水,倒到缸里,剩下一点,用个刷子,一点不剩的刷进去
Reader Writer
本文参考杜聚宾老师的视频;
相关代码已上传码云:https://gitee.com/liuhuxiang/java