Java IO流之字符流详解

字符流概述

字符流的底层其实就是字节流
字符流 = 字节流 + 字符集

字符流特点

  • 输入流:一次读一个字节,遇到中文时,一次读多个字节
  • 输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中

使用场景

用于对纯文本文件进行读写操作

1. FileReader字符输入流

书写步骤:
① 创建字符输入流对象

细节1:如果文件不存在,就直接报错
Java IO流之字符流详解_第1张图片

② 读取数据

细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数
读到文件末尾,read方法返回-1
Java IO流之字符流详解_第2张图片

③ 释放资源

细节:每次使用完流之后都要释放资源

字符输入流底层原理(重点)

Ⅰ、创建字符输入流对象
  底层:关联文件,并创建缓冲区(长度为8192的字节数组)字符流有缓冲区,字节流并没有。
Ⅱ、读取数据
  底层:1.判断缓冲区中是否有数据可以读取。  2.缓冲区没有数据:就从文件中获取数据装到缓冲区中,每次尽可能装满缓冲区;如果文件中没有数据了,就返回-1。 3.缓冲区有数据:就从缓冲区中读取。空参的read方法:一次读取一个字节,遇到中文一次读取多个字节,把字节解码并转成十进制返回;有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中。

2. FileWriter字符输出流

书写步骤:
① 创建字符输出流对象

细节1:参数是字符串表示的路径或者File对象都是可以的
细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
Java IO流之字符流详解_第3张图片

② 写数据

细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
Java IO流之字符流详解_第4张图片

③ 释放资源

细节1:每次使用完流之后都要释放资源

字符输出流底层原理(重点)

内存中也存在一个缓冲区(长度为8192的字节数组),从内存中的缓冲区向目的地文件中写出数据需要满足三种情况之一:
情况一 缓存区装满了
情况二 flush()刷新
情况三 close()关流

你可能感兴趣的:(IO流,java,字符流)