IO流总结
按方向来分有两种流:
输入流和输出流,这两个通过相应的流的名字可以区分,例如InputStream和OutputStream,FileReader和FileWriter等等。
按处理方式有两种流:
字节流和字符流,字节流如InputStream和OutputStream,字符流例如FileReader和FileWriter。
按作用来分也有两种:
节点流和处理流
节点流:节点流就是一个管道直接插到数据源上面,直接读取数据源上面的数据,或者直接往数据源里面写入数据。
典型的节点流:文件流,例如:文件的字节输入流(FileInputStream),文件的字节输出流(FileOutputStream),文件的字符输入流(FileReader),文件的字符输出流(FileWriter)。
处理流: 是对一个已存在的流的连接和封装,再通过这个封装的流实现数据调用和读写,通俗的说处理流就是包在别的流上面的流,相当于是包到别的管道上面的管道。
常见的处理流有:
1.缓冲流 BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法
2.转换流 InputStreamReader OutputStreamWriter- 要inputStream 或OutputStream作为参数,实现从字节流到字符流的转换
3.数据流 *DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。