🎊专栏【JavaSE】
🍔喜欢的诗句:天行健,君子以自强不息。
🎆音乐分享【如愿】
🎄欢迎并且感谢大家指出小吉的问题🥰
文章目录
- 🌺字符输入流
- 🎄空参read方法
- 🛸分析
- 🎈原因
- 🎄带参read类型
- 🛸分析
- 🌺字符输出流
- 🎄写入字符或字符串
- 🎄写入字符数组
- 🛸续写
🌺字符输入流
上一篇文章我们讲解了字节输入流,但是字节输入流不能读取汉字,如果要想读取汉字,就要使用到这篇文章中的 字节输入流
- 字符流的底层也是字节流,默认是一个字节一个字节读取的
- 遇到中文会一次读取多个,GBK一次读取2个,UTF-8一次读取3个字节
🎄空参read方法
发现我们打印出来汉字
🛸分析
如果没有强转(没有(char)ch),结果是什么样呢
发现不是汉字,而是一串数字
🎈原因
read方法默认也是一个字节一个字节读取的,如果遇到中文就会读取多个字节
在读取后,底层的方法也会进行解码为十进制
,最终把这个十进制作为返回值
英文 | 中文 |
---|---|
二进制数 | 二进制数 |
0110 0001 | 11100110 10110001 10001001 |
2个字节2个字节的读 | 3个字节3个字节的读 |
所以要强转为char类型
🎄带参read类型
控制每次读取多少个字符
package IODemo1;
import java.io.*;
public class Demo1 {
public static void main(String[] args) throws IOException {
//创建对象并关联本地文件
FileReader fr=new FileReader("G:\\a.txt");
//读取数据
char[] chars=new char[2];
int len;
while ((len=fr.read(chars))!=-1){
System.out.println(new String(chars,0,len));
}
}
}
我们发现,明明控制的是 每次2个读取2个,那为什么会出现上图的情况呢
🛸分析
因为我们使用的是 println
有参的类型相当于是
空参的read+强制类型转换
🌺字符输出流
根据字符集的编码方式进行解码
,把解码
之后的数据写到文件中去
🎄写入字符或字符串
🎄写入字符数组
🛸续写
我们发现,第二次写的内容会把第一次写的给覆盖下去,如果我们不想覆盖下去,想接着上一次的写
,要怎么办呢
如果对应这篇文章的知识点有问题,欢迎在评论区进行讨论