Files.newBufferedReader(Path path, Charset cs)与new BufferedReader(new InputStreamReader(new FileInpu...

本文对比了Java 1.7和1.4中用于读取文件的API差异,重点分析了Files.newBufferedReader与newBufferedReader在处理UTF-8编码文件时的不同行为。1.7版本在遇到未知字符时会中断程序,而1.4版本则能自适应读取,更适合字符类型不确定的情况。

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

下面分别为1.7和1.4提供的API

1 Files.newBufferedReader(Paths.get(""), StandardCharsets.UTF_8);
2 new BufferedReader(new InputStreamReader(new FileInputStream(new File("")), StandardCharsets.UTF_8));

1.7的API

1 Files.newBufferedReader(Paths.get(""), StandardCharsets.UTF_8);

newBufferedReader静态方法

查看2784行InputStreamReader构造函数

查看132行静态方法

 查看85行构造函数

StreamDecoder接收的参数CharsetDecoder为cs.newDecoder()。

 

1.4的API

1 new BufferedReader(new InputStreamReader(new FileInputStream(new File("")), StandardCharsets.UTF_8));

片段1,第6行,new BufferedReader(reader),都是将reader作为参数传入。下面重点查看InputStreamReader构造函数

 查看116行静态方法

 

查看78行构造函数,下图231行最终调用下图237行最终的构造函数

StreamDecoder接收的参数CharsetDecoder为cs.newDecoder().onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE)。

 

 两者的区别为StreamDecoder接收的参数,1.4API多了如下两个参数

 

项目中遇到,UTF-8读取未知字符类型文件,前者报错导致程序中断,后者正常。通过编写代码,验证适用的字符类型,前者才能读取成功。

应该是字符类型不对时,后者自适应读取,查看源码时需要导入包含源码的src.zip包。

如果字符类型不确定时,优先采用1.4API。

不对之处,敬请指正。

 

转载于:https://www.cnblogs.com/blouson/p/11141306.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值