字符流是什么
字符流的读写类
字符流的输入流
空参read()方法
public class FileReader学 {
public static void main(String[] args) throws IOException {
/*
字符输入流
1、创建对象
public FileReader(File file) 创建字符输入流关联本地文件
public FileReader(String pathName) 创建字符输入流关联本地文件
2、读取数据
public int read() 读取数据,读到末尾返回-1
public int read(char[] buffer) 读取多个数据,读到末尾返回-1
3、释放资源
public void close(); 释放资源/关闭流
*/
//1、创建对象
FileReader fr=new FileReader("/Users/XXX/IdeaProjects/basecode/day02/aaaa/a.txt");
//2、读取数据read()
//字符流的底层是字节流,也是一个字节一个字节读取的
//如果遇到中文,就会一次读取多个,GBK(他的编码方式就是他字符集的名字)一次读取两个,UTF-8一次读取多个
/*
read()细节
1、默认也是一个字节一个字节的读取,如果遇到中文会读取多个字节
2、在读取过后,会在底层解码并且转化做十进制---->比如说遇到中文,按照三个字节的方式进行解码(UTF-8:1110 10 10)
最终把这个十进制的数字返回
3、想要看到这些中文汉字,把他们强制转换就可以了
*/
int ch;
while ((ch=fr.read())!=-1){
System.out.print((char) ch);
}
//3、释放资源
fr.close();
}
}
有参read()方法
public class read有参 {
public static void main(String[] args) throws IOException {
/*
字符输入流
1、创建对象
public FileReader(File file) 创建字符输入流关联本地文件
public FileReader(String pathName) 创建字符输入流关联本地文件
2、读取数据
public int read() 读取数据,读到末尾返回-1
public int read(char[] buffer) 读取多个数据,读到末尾返回-1
3、释放资源
public void close(); 释放资源/关闭流
*/
//1、创建对象
FileReader fr=new FileReader("/Users/XXX/IdeaProjects/basecode/day02/aaaa/a.txt");
//2、读取数据
char[] chars=new char[2];
int len;
while((len= fr.read(chars))!=-1){
System.out.print(new String(chars,0,len));
}
//3、释放资源
fr.close();
}
}
read细节
read()细节:
1、默认是一个一个字节读取的,但是遇到中文会一次读取多个字节
2、在读取之后,方法的底层还会解码并且转换成十进制
把这个数转换做十进制作为返回值
这个十进制的数据也表示字符集上的数字
英文:0110 0001
read方法,解码并且转换成为97
中文:1110010 10110001 10001001
用read方法读取,转化做27721
如果想要读取中文,把这些十进制数字(char)强制转换就好了
read(数组)细节
读取数据,解码,强制转换,三步合一,把强制转换后的数字放到数组中