JDK源码随缘分析之IO系列_BufferedReader.readLine()

本文详细分析了JDK中BufferedReader的readLine()方法的工作原理,揭示了为何该方法不会读取换行符。通过源码解读,阐述了readLine()如何处理EOF,如何查找并跳过换行符,以及' '和' '在不同系统中的差异。最后,建议在写入时手动添加换行符。

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

   //input和output是文件路径字符串
    BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(input),"UTF-8"));
    BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output),"UTF-8"));

在使用BufferedWriter时遇到问题:
s=bufferedReader.readLine();
bufferedWriter.write(s);
这样写的话文件里并不会换行。
是不是readLine()去除了换行符?还是write去除了换行符?
(当然我们都知道是前者,为了强行分析一波这里假装不知道
我们看看BufferedReader的jdk源码:
首先它有nextChar和nChars两个属性,然后构造时候置为0
在这里插入图片描述
然后我们看看readLine()方法
在这里插入图片描述
这是fill()中的一段代码
在这里插入图片描述
可以看到,它是将nextChar作为读取标记,nChars表示目前读进数组的最后一个位置,一次从缓冲区读一部分,如果发现读进来的这部分读完了,就再去试着读一次,直到遇到EOF。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值