字符输入流 总结,我是新手写错可以指出来
看InputStreamReader jdk文档
看FileReader(便捷类)jdk文档
看BufferedReader jdk文档
从这里可以看出区别它们三个都是输入字符输入流的Reader
1 FileReader:提供默认缓冲大小和默认字符集
2 InputStreamReader:提供可自己指定或者使用默认平台的字符集。没有提供缓冲,使用字符集将字节解码成字符
3 BufferedReader: 高效读取文本,并且自带一个默认的缓冲区,不提供默认的字符集
4 不管是使用FileReader还是使用InputStreamReader都是从字节输入流*中读取文本,
5 其中FileReader指定的输入流是FileInputStream(字节输入流)
public FileReader(String fileName){
super(new FileInputStream(fileName));
}
6 而InputStreamReader没有指定是哪个字节流,可以自己指定是哪个,但是都必须是继承与抽象字节流的比如FileInputStream,DataInputStream;
public OutputStreamReader(InputStream in){
}
7 FileReader 默认的编码
FileReader fr = new FileReader("D:\\file\\file1.txt");
System.out.prntlnt(fr.getEncoding());
8 从控制台能看出默认编码编码是UTF8,这个编码不能自己由名称或者显示指定
9 InputStreamReader的默认编码
InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\file\\file1.txt"));
可以看到默认编码是一样的
10 显示指定输入流字符集编码为GBK
InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\file\\file1.txt"),"GBK");
11 两个区别就是在能否指定一个字符集编码或者使用哪种字节输入流读取文本
12 而BufferedReader的主要作用是高效读取文本,还有个缓冲,但是自身没有提供默认的字符集,(如果提供了就没它们两个什么事了),所以需要有提供字符集的类来作为参数
13 如果只是读取单个字符那么可以直接使用FileReader,必须是UTF8格式的才能读取,其他编码格式会乱码
FileReader fr=new FileReader("d:\\file\\file1.txt");
14 如果想高效读取文本可以使用BufferedReader
BufferedReader br=new BufferReader(new FileReader("d:\\file\\file1.txt"));
BufferedReader br=new BufferReader(new InputStreamReader(new FileInputStream("D:\\file\\file1.txt")));
//也能这样,不过不大合适,太长了测试下!一般是第一种和第二种
BufferedReader bbr=new BufferedReader(new InputStreamReader(new DataInputStream(new FileInputStream("D:\\file\\file1.txt"))));