Java IO学习【9】模拟一个Buffer-MyBufferedReader
来源:互联网 发布:网络加速器哪个好用 编辑:程序博客网 时间:2024/06/05 06:37
俺在第【7】中已经简单说明了readLine的原理,在此基础上可以写一个自己的缓冲区,就叫MyBufferedReader,没啥创意,但很实用的名字。如果将来给我孩子起名字也起一个实用的名字~哈哈~,晚上好好了玩耍了一伙儿,感觉没有以前那么累了,所以确实得劳逸结合的来。
回想BufferedReader,可以推出在MyBufferedReader中应该最少有两个函数,一个是按字符读取的方式就叫做myRead();另一个是按行读取方式就是myReadLine();现在各自来说他们的编码方案。
(1)myRead();这个是每次读取一个字符,所以用底层方式将数据读到buf中后,在从buf中取出一个字符即可,这步需要一个int pos来记录buf的当前位置;当将buf中的数据读完后需要重新利用底层函数进行读取,这步需要一个count来记录是否已将buf读完,同时将pos置0因为需要从buf的首部开始读取;所以代码如下:
public int myRead() throws IOException{//1.从源中获取一批数据到缓冲区中,需要先做判断,//只有计数器为0时表示已从缓冲区中读完,需要从源中获取数据if(count==0){count = r.read(buf);//每次获取数据到缓冲区后(即上一次的缓冲区数据已经读完),从缓冲区头部开始读取数据pos = 0;}if(count==-1) //表示已经文件读完。return -1;char ch = buf[pos++];count--;return ch;}
这个编码就完成了。
(2)关于myReadLine这个是按行读取字符的,对于StringBuilder不是很了解,以后学习。
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;}
0 0
- Java IO学习【9】模拟一个Buffer-MyBufferedReader
- IO流(MyBufferedReader)
- JAVA之IO技术自定义装饰类MybufferedReader
- java基础入门----MyBufferedReader
- Java基础----MyBufferedReader
- java学习笔记(三十七)java新IO之Buffer
- Java之IO、NIO、Buffer
- 如何利用java io stream把读出的byte[] buffer写入一个图片文件中?
- java 缓存Buffer学习
- Java IO学习【5】复制一个文本文件
- java新IO---缓冲区与Buffer
- direct io/buffer io
- Java NIO 学习(二)--Buffer
- java学习-NIO(二)Buffer
- JAVA NIO Buffer的学习
- 21-IO流-16-IO流(字符流-缓冲区-自定义MyBufferedReader-read方法)
- 21-IO流-17-IO流(字符流-缓冲区-自定义MyBufferedReader-readLine方法)
- 16-IO流(字符流-缓冲区-自定义MyBufferedReader-read方法) 17-IO流(字符流-缓冲区-自定义MyBufferedReader-readLine方法) 16-17总
- JsPlumb 基本使用方法( JsPlumb & JQ ContextMenu & JQ Dialog)
- Linux帮助命令
- onmousemove、onmouseover、 onmouseup及onclick的区别
- select sequence.currval 时报错 ORA-08002: 序列XXXX尚未在此进程中定义
- HDU 4628 Pieces (状压DP)
- Java IO学习【9】模拟一个Buffer-MyBufferedReader
- 防止 Chrome 屏蔽 非官方 扩展程序
- object c中 new和alloc区别
- 输入二
- 欢迎使用CSDN-markdown编辑器
- HDU 4568 旅行商问题
- HDU 3853
- 黑马程序员——JAVA基础——网络编程
- Code Forces 535 A. Tavas and Nafas(水~)