BufferedReader中读取乱码的问题,有可能是文件写的编码不同

首先来理清两个知识点:
InputStream,基于字节Byte操作的抽象方法,前面怕大家没留意,特意加粗,它只是一个抽象,并且是基于Byte,程序底层一般都是Byte交换或者持久化,然后到机器码01

BufferedInputStream是一个过滤流,即它必须基于一个InputStream的实现上构建,它的作用仅仅是带缓存的读写,加快读取效率,一般包在最外围,看看基本用法:

InputStream inputStream = BufferedInputStream(new ObjectInputStream(new FileInputStream("c:/1.txt")));

InputReader,基于字符操作的抽象方法,什么是字符?字节只能只能表示0-9 A-Z 还有一系列符号!@#…那么语言中文之类的怎么表达,字符就诞生了,字节与字符会联系起来,它需要有一定的规则吧,编码集也顺应诞生。例如以下的:

ASCII码:一个英文字母(不分大小写)占一个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数。换算为十进制,最小值-128,最大值127。如一个ASCII码就是一个字节。
UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节

那么InputStreamReader就充当了字节到字符的桥梁,从InputStream到Reader的过程要指定编码字符集,否则将采取OS默认字符集,那就可能导致乱码
BufferedReader中读取乱码的问题,有可能是文件写的编码不同_第1张图片

 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

此外,特别注意的是,读写编码一致
小编有一次写程序时候在生成文件一开始忘加编码,紧接着用UTF-8去读,编码不同,读出来的还是乱码,在读取文件时候必须先用notepad+之类工具去查看编码,保持编码一致,这里不建议采用微软自带的文本,据一位大神说微软文本编辑器会自动在前面加一行标识码,到底是啥小编也不清楚,但避免踩雷最好别使用

你可能感兴趣的:(java基础)