InputStreamReader 与 BufferedReader 文件读取时候区别

关于怎么知道上传文件是什么类型的编码上面文章有做代码块。

我项目测试中 遇到这样可以通过 流的读取时候才不会有乱码:

if (charset=="GBK") { //GBK编码 or GB2312编码
System.out.println("charset:"+charset);
InputStreamReader reader = new InputStreamReader(new FileInputStream(new File(filepath)),"GBK");
br = new BufferedReader(reader);
}
if (charset=="UTF-8") { //UTF-8编码
System.out.println("charset:"+charset);
br=new BufferedReader(new InputStreamReader(new FileInputStream(filepath),"UTF-8"));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InputStreamReaderBufferedReader是Java中常用的I/O类。InputStreamReader是字节与字符之间的桥梁,可以将字节转换为字符,而BufferedReader则是对字符输入的包装,提供了一个缓冲区以便更高效、更灵活地读取字符。下面就这两个类的常见用法和实例做一个简单的讲解。 InputStreamReader的常见用法 1. 使用InputStreamReader读取文本文件InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName), "UTF-8"); char[] buffer = new char[1024]; int length; while ((length = isr.read(buffer)) != -1) { System.out.println(new String(buffer, 0, length)); } 上述代码通过InputStreamReader读取文本文件,可以指定读取文件编码方式。同时,读取到的字符数据不是直接被输出,而是通过缓冲数组进行存储。 2. 使用InputStreamReader从网络中读取数据。 InputStreamReader isr = new InputStreamReader(socket.getInputStream()); char[] buffer = new char[1024]; int length; while ((length = isr.read(buffer)) != -1) { System.out.println(new String(buffer, 0, length)); } 上述代码通过socket获取InputStreamReader对象,从网络读取传输的数据,并存储到缓冲数组中。 BufferedReader的常见用法 1. 使用BufferedReader逐行读取文件BufferedReader br = new BufferedReader(new FileReader(fileName)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } 上述代码通过BufferedReader逐行读取文件内容,并存储到line字符串中,如果读到文件末尾就会退出while循环。 2. 使用BufferedReader从网络中读取数据。 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line; while ((line = br.readLine()) != null) { System.out.println(line); } 上述代码通过BufferedReader获取网络输入,然后逐行读取数据并输出。 总结 通过上述的实例讲解,我们了解了InputStreamReaderBufferedReader的常见用法。在实际开发中,我们可根据具体场景的需要,对这两个类做出更灵活的运用。在Java I/O编程中,输入、输出的质量和效率是非常重要的,比如在数据量较大的情况下使用BufferedReaderInputStreamReader能够提高I/O性能和响应速度,提高程序的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值