Java IO中用于读写文件的四个抽象类:Reader,Writer,InputStream,OutputStream
根据流所处理的数据类型分为两类:
(1)字节流:用于处理字节数据。(InputStream,OutputStream)
(2)字符流:用于处理字符数据,Unicode字符数据。(Reader,Writer)
读写文件只要选一种实现这四个抽象类的实现类操作即可,Java IO提供的实现类如下:
InputStream:
OutputStream:
Reader:
Writer:
更牢固的掌握常用的读写类的方法:记住下面一种流的分类方式、知道可以利用缓存来提高读写效率的原理。
按照流所处理的源:
(1)节点流:低级流
从一个特定的IO设备读数据的流(read)
向一个特定的IO设备写数据的流(write)
(2)处理流:高级流
对已经存在的流进行连接和封装的流。(对低级流进行处理和封装的流)
这里封装的目的是提供缓存的功能:缓冲流
缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。有四种缓冲流:BufferedReader,BufferedWriter,BufferedInputStream,BufferedOutputStream
(1)缓冲输入流支持其父类的mark()和reset()方法:
mark()用于“标记”当前位置,就像加入了一个书签,可以使用reset()方法返回这个标记重新读取数据。
(2)BufferedReader提供了readLine()方法用于读取一行字符串(以\r或\n分隔)。
(3)BufferedWriter提供了newLine()用于写入一个行分隔符。
(3)对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()方法将会使内存中的数据立刻写出。
我们要记住常用的处理字节流与字符流的类:
注意:
1. 字节流用于读写诸如图像数据之类的原始字节流。(InputStream,OutputStream)
2. 字符流用于读写诸如文件数据之类的字符流。(Reader,Writer)
3. 低级流能和外设交流。
4. 高级流能提高效率。
5. 高级流能封装低级流,从而跟外设交流,
5. InputStreamReader 是字节流通向字符流的桥梁。
6. OutputStreamWriter是字符流通向字节流的桥梁。
7. 要想转换编码格式,目的就是读取字符流,但要通过字节流进行格式的转换,所以必须要用到InputStreamReader或者OutputStreamWriter的当桥梁:
eg: new InputStreamReader(in,"UTF-8") // 指定读取文件时以UTF-8的格式读取
new OutputStreamWriter(out,"GB2312") // 指定写入文件时以GB2312的格式写入