1.JAVA流式输入/输出原理
站在程序的角度思考问题流是用来读写数据的,Java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文件里面存放着各种各样的数据,我们想读文件里面的数据怎么办呢?是通过一个流的方式来读,咱们要想从程序读数据,对于计算机来说,无论读什么类型的数据都是以010101101010这样的形式读取的。怎么把文件里面的数据读出来呢?你可以把文件想象成一个小桶,文件就是一个桶,文件里面的数据就相当于是这个桶里面的水,那么我们怎么从这个桶里面取水呢,也就是怎么从这个文件读取数据呢。
2.输入输出流分类
不同流的分类,仔细看看图java.io.* 包里面定义了所有的流,所以一说流指的就是IO包里面的
什么叫输入流?什么叫输出流?用一根管道一端插进文件里程序里面,然后开始读数据,那么这是输入还是输出呢?如果站在文件的角度上,这叫输出,如果站在程序的角度上,这叫输入。
记住,以后说输入流和输出流都是站在程序的角度上来说。
3.节点流和处理流
处理流会提高效率你要是对原始的流不满意,你可以在这根管道外面再套其它的管道,套在其它管道之上的流叫处理流。为什么需要处理流呢?这就跟水流里面有杂质,你要过滤它,你可以再套一层管道过滤这些杂质一样。
3.1 节点流类型
红色区域,使用还是比较多的节点流就是一根管道直接插到数据源上面,直接读数据源里面的数据,或者是直接往数据源里面写入数据。典型的节点流是文件流:
- 字节流
- 文件的字节输入流(FileInputStream)
- 文件的字节输出流(FileOutputStream)
- 字符流
- 文件的字符输入流(FileReader)
- 文件的字符输出流(FileWriter)。
使用频率还是比较高的,这些都是基石
3.2 处理流类型
红色部分还是比较重要的处理流是包在别的流上面的流,相当于是包到别的管道上面的管道。
4.InputStream(输入流)
输入流关系图凡是以InputStream结尾的管道,都是以字节的形式向我们的程序输入数据。
4.1.InputStream的基本方法
常用方法- read()方法是一个字节一个字节地往外读,每读取一个字节,就处理一个字节。
- read(byte[] buffer)方法读取数据时,先把读取到的数据填满这个byte[]类型的数组buffer(buffer是内存里面的一块缓冲区),然后再处理数组里面的数据。
这就跟我们取水一样,先用一个桶去接,等桶接满水后再处理桶里面的水。如果是每读取一个字节就处理一个字节,这样子读取也太累了。
网友评论