任何文件都可以使用字节流进行操作,因为几乎所有的文件的内容都可以转换为字节包括文本文件,使用字节流操作只是快慢问题,而字符流就不能操作所有的文件了,字符流只能操作已知编码的文件,如文本文件,控制台信息,因为这些都是使用了默认的编码。
字符是由指定编码后的字节转换而来的,所以字符流操作,实际上底层还是以字节流的形式操作的,只是在调用字节流操作时,使用了指定的编码或默认的编码,将字节转换为字符了,而如果使用的编码不对,则转换为字符就会出问题。
FileReader和FileWriter因为使用的是默认的编码,而InputStreamReader和OutputStreamWriter可以使用任意的编码,所以FileReader和FileWriter比较死,而InputStreamReader和OutputStreamWriter比较灵活。