(1)InputStream/OutputStream是字节流的抽象类, 提供了字节流的输入/输出,而 Reader/Writer是字符流的抽象类,提供了字符流的输入/输出。Java中的字符是Unicode编码,是双字节的,如果读取文本数据或者是字符串,使用字节流读取,可能会导致乱码。
(2)文件File的字节流输入/输出是 FileInputStream/FileOutputStream,字符流输入/输出是 FileReader/FileWriter。
(3)除了文件的其他源/目的地的字节流输入/输出是 InputStream/OutputStream,字符流输入/输出是 InputStreamReader/OutputStreamWriter。
(4)带内存缓冲区的字节流输入/输出是 BufferedInputStream/BufferedOutputStream,字符流输入/输出是BufferedReader/BufferedWriter。
输入: 源数据(文件,控制台等)先到输入流,再到缓冲输入流,最后再到目的地(变量等)。
输出: 源数据(内存数据)先到 缓冲输出流,再到输出流,最后再到目的地(文件、控制台等)。