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

本文探讨了BufferedReader在读取文件时可能出现的乱码问题,关键在于理解InputStream与InputReader的区别以及编码的重要性。InputStream是基于字节操作,而InputReader处理字符,需要指定正确的编码集以避免乱码。确保读写文件时编码一致,推荐使用第三方工具检查文件编码,以防止微软文本编辑器可能带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先来理清两个知识点:
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 bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值