字符流概述
字符流的底层其实就是字节流
字符流 = 字节流 + 字符集
字符流特点
- 输入流:一次读一个字节,遇到中文时,一次读多个字节
- 输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中
使用场景
用于对纯文本文件进行读写操作
1. FileReader字符输入流
书写步骤:
① 创建字符输入流对象
细节1:如果文件不存在,就直接报错
② 读取数据
细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数
读到文件末尾,read方法返回-1
③ 释放资源
细节:每次使用完流之后都要释放资源
字符输入流底层原理(重点)
Ⅰ、创建字符输入流对象
底层:关联文件,并创建缓冲区(长度为8192的字节数组)字符流有缓冲区,字节流并没有。
Ⅱ、读取数据
底层:1.判断缓冲区中是否有数据可以读取。 2.缓冲区没有数据:就从文件中获取数据装到缓冲区中,每次尽可能装满缓冲区;如果文件中没有数据了,就返回-1。 3.缓冲区有数据:就从缓冲区中读取。空参的read方法:一次读取一个字节,遇到中文一次读取多个字节,把字节解码并转成十进制返回;有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中。
2. FileWriter字符输出流
书写步骤:
① 创建字符输出流对象
细节1:参数是字符串表示的路径或者File对象都是可以的
细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
② 写数据
细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
③ 释放资源
细节1:每次使用完流之后都要释放资源
字符输入流底层原理(重点)
内存中也存在一个缓冲区(长度为8192的字节数组),从内存中的缓冲区向目的地文件中写出数据需要满足三种情况之一:
情况一 缓存区装满了
情况二 flush()刷新
情况三 close()关流