博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符流-缓冲区-自定义myBufferedReader
阅读量:6983 次
发布时间:2019-06-27

本文共 1627 字,大约阅读时间需要 5 分钟。

public class myBufferedReaderDemo {

public static void main(String[] arg) throws IOException{

FileReader fr = new FileReader("demo.txt");
MyBufferedReader bufr = new MyBufferedReader(fr);
String line = null;
while((line = bufr.myReadLine()) != null){
System.out.println(line);
}
}
}

//自定义缓冲区文件

/*

* 自定义的读取缓冲区。其实就是模拟一个BufferedReader
* 分析:
* 缓冲区无非就是封装一个数组
* 并对外提供更多的方法对数组进行访问。
*
* 缓冲的原理:
* 其实就是从源中获取一批数据装进缓冲区。
* 在缓冲区中不断的去处一个一个数据。
*
* 在此次取完后,在从源中继续取一批数据进缓冲区。
* 当源中的数据取光时,用-1作为结束标记。
*
*
*
*/

public class MyBufferedReader {

private FileReader r;
//定义一个字符数组作为缓冲区
private char[] buf = new char[1024];
//定义一个指针用于操作这个数组的元素,当操作到最后一个元素后,指针应该归零。
private int pos =0;
//定义一个计数器用于记录缓冲区的数据个数,当该数据减到0,就从源中继续获取数据到缓存区。
private int count =0;
MyBufferedReader(FileReader fileReader){
this.r = fileReader;
}
public int myRead() throws IOException{
//优化后的代码
if (count ==0) {
count = r.read(buf);
pos = 0;
}
if (count < 0) {
return -1;
}
char ch = buf[pos++];
count --;
return ch;
/*
//1.从源中获取一批数据到缓冲区。需要先做判断,只有计数器为0时,才需要从源中获取数据。
if (count == 0) {
count = r.read(buf);
if (count < 0) {
return -1;
}
//每次获取数据到缓冲区时,角标为0
pos = 0;
char ch = buf[pos];
pos ++;
count --;
return ch;
}else if (count > 0) {
char ch = buf[pos];
pos ++;
count --;
return ch;
}
*/
}
public String myReadLine()throws IOException {
StringBuilder sb =new StringBuilder();
int ch = 0;
while((ch= myRead()) != -1){
if (ch == '\r') {
continue;
}
if (ch == '\n') {
return sb.toString();
}
sb.append((char)ch);
}
if (sb.length() != 0) {
return sb.toString();
}
return null;
}
public void myClose() throws IOException{
this.r.close();
}

}

转载于:https://www.cnblogs.com/chzlh/p/9425961.html

你可能感兴趣的文章
tigerVNC的简单使用教程(CentOS的远程桌面连接)
查看>>
组合数据类型综合练习:英文词频统计
查看>>
文献综述八:基于JAVA的商品网站的研究
查看>>
iOS 应用有用户评论功能 因为潜在色情信息被退回解决方案
查看>>
usaco Typo
查看>>
DataTable 实现新增加合计行
查看>>
字符串
查看>>
创建对象的三种方式
查看>>
spring学习之spring 插件 for eclipse
查看>>
js-sha256源码
查看>>
运维笔试题
查看>>
dispaly、position、float之间的关系与相互作用
查看>>
MyEclipse加入jquery.js文件missing semicolon的错误
查看>>
axis1.4生成客户端
查看>>
MI-NOTE黑砖
查看>>
WinForm中Component Class、User Control及Custom Control的区别和使用建议
查看>>
地区选择控件杂记
查看>>
来自工程师的8项Web性能提升建议
查看>>
dns配置文件
查看>>
springBoot、SpringCloud 常用注解
查看>>