黑马程序员技术交流社区
标题:
readLine()方法的原理
[打印本页]
作者:
路国强
时间:
2013-12-27 12:51
标题:
readLine()方法的原理
求BufferedReader中的readLine方法的原理解释!求大哥来相助,回答好的我要写入笔记中。谢谢
作者:
75100313
时间:
2013-12-27 22:48
package com.mth.MyBufferReadLine;
import java.io.FileReader;
import java.io.IOException;
/*
*
* 明白了BufferedReader类中特有方法readLine()之后
* 可以自定义一个类中包含一个功能和readLine()一致的方法
* 来模拟一下BufferedReader
*
*
* */
public class MyBufferedReader {
private FileReader fr;
public MyBufferedReader(FileReader fr) {
super();
this.fr = fr;
}
// 可以一次读一行数据的方法
// 原理就是读一个存一个 结果返回字符串(这个方法来自于FileReader里面的read()方法)
// 选取集合用StringBuilder 不必考虑大小 正好是string
// 异常选择抛出 因为是别人调用你的功能 你要告诉别人 有异常 谁调用 谁处理
public String myReadLine() throws IOException {
/*
* 定义一个 临时容器 原BufferReader中封装的是字符数组 为了演示方便 定义一个StringBuilder 容器
* 因为最终还是要将字符变成字符串
*/
StringBuilder sb = new StringBuilder();
int ch = 0;
/*
* 读一个存一个 当读到回车符的时候 把字符串返回 回车符由(\r\n)构成 sb里面 不存回车符
*/
while ((ch = fr.read()) != -1) {
if (ch == '\r')
continue;
if (ch == '\n') {
return sb.toString();
} else {
sb.append((char) ch);
}
}
/*
* 这里判断是把最后一行的回车符删除后出现 最后一行读不出来
* 实际上已经存在sb里面 只不过 没有返回 加了一个判断
*
* */
if (sb.length() != 0) {
return sb.toString();
}
return null;
}
/*
* 关闭方法 因为缓冲区是为fr 服务的 所以 fr的关闭就是关闭缓冲区
*/
public void myClose() throws IOException {
fr.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2