对于流的概念,感觉晦涩难懂,根据个人的理解,整理下,以及一些常用的流
1 概念理解
我们举个场景,从迅雷的服务器上,下载一部电影,大概的过程是,迅雷硬盘读取到内存,通过网络传输,到本地电脑内存,再由本地电脑,持久化到本地硬盘,这就是流,之所以叫流,因为像水流一样,如上图
2 流的分类
1 按照流的方向而言:输入流 输出流
输入输出是相对于内存而言的,从内存中出来的就是输出流,到内存中的就是输入流
输入流又叫做InputStream,输入也叫做读 Read 输出流又叫做OutputStream,输出也叫写 Write
2 按照读取数据方式不同:字节流 字符流
字节流按字节方式读取 字符流按字符方式读取(一次两个字节)
字节流适合读取:视频 声音 图片 等二进制的文件(微软的doc文件,不是纯文本,包括格式等)
字符流适合读取:纯文本文件
java 语言中,所有的字节流都是以Stream结尾 所有的字符流都是以Reader或Writer结尾
3 具体的流
java.io.* (重点掌握这16个) FileInputStream ----------------读取文件 | 字节 | 输入 FileOutputStream ---------------读取文件 | 字节 | 输出 FileReader ---------------------读取文件 | 字符 | 输入 FileWriter----------------------读取文件 | 字符 | 输出 BufferedInputStream ------------带有缓冲区 | 字节 | 输入 BufferedOutputStream------------带有缓冲区 | 字节 | 输出 BufferedReader------------------带有缓冲区| 字符 | 输入 BufferedWriter------------------带有缓冲区| 字符 | 输出 DateInputStream-----------------专门读取数据 DateOutputStream----------------专门读取数据 ObjectInputStream---------------专门读取java对象 ObjectOutputStream--------------专门读取java对象 InputStreamReader--------------转换流(字节流转换成字符流) OutputStreamWriter PrintWriter PrintStream -------------------标准的输出流(输出到控制台)
4 UML类图
我们参考jdk文档画出UML类图 :http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
InputStream OutputStream Reader Writer (java中的流四大家族)
InputStream OutputStream
flush 仅仅针对输出流,意思是把剩余的东西一点不剩的输出,比如一桶水,倒到缸里,剩下一点,用个刷子,一点不剩的刷进去
Reader Writer
本文参考杜聚宾老师的视频;