Java IO 流进阶笔记
转换流

程序中操作的是字符流(转码后),但与文件交互时底层仍是字节流。
InputStreamReader(InputStream in, "UTF-8")会把字节流转换为字符流。比如文件中有中文“我”,如果直接用FileInputStream.read()逐字节读取并强转char,会出现乱码,因为 UTF-8 下一个中文通常由 3 个字节组成;而用InputStreamReader读取时,会先完成解码再返回字符。- 同理,向文件写入“我”时,底层需要写入 3 个字节;这个编码过程由
OutputStreamWriter完成,它会把字符转换后再写入OutputStream。
缓冲流
缓冲流的核心作用是提升读写效率:读时先把文件数据读入内存缓冲区,写时先写入缓冲区,缓冲区满后再批量写入文件系统。
- 字节缓冲流
BufferedInputStream(InputStream in) - 字符缓冲流: readLine() newLine();
- 字符缓冲流:
readLine()、newLine()
使用缓冲流写文件时,如果数据未填满缓冲区,需要手动调用 flush()。