本帖最后由 传奇查 于 2015-11-20 02:56 编辑
请大神赐教!鄙人不胜感激~~
先贴代码,问题在后面~
- package cn.fuxi._06io;
- /**
- * 练习:
- * 自定义一个读取缓冲区类,模拟一个BufferedReader.
- * 分析:
- * 缓冲区中无非就是封装了一个数组,并对外提供了更多的方法对数组经行访问
- * 其实这些方法最终操作的都是数组的角标.
- * 缓冲的原理:
- * 其实就是从源中获取一批数据到缓冲区中,再从缓冲区中不断的取出一个一个数据.
- * 在此次取完后,再从源中继续取一批数据进入缓冲区,当源中的数据被取完时,用-1作为结束标记.
- */
- import java.io.*;
- class MyBufferedReader{
- private Reader r;
- //定义一个数组作为缓冲区
- private char[] buf = new char[1024];
- //定义一个指针用于操作这个数组中的元素,当操作到最后一个元素后,指针应该归零
- private int pos = 0;
- //定义一个计数器用于记录缓冲区中的数据个数,当该数据减到0;
- //就从源中继续获取数据到缓冲区中.
- private int count = 0;
- MyBufferedReader(Reader r){
- this.r = r;
- }
- //该方法从缓冲区中一次取一个字符
- public int myRead() throws IOException{//【<-----大神请看,这里指定的是返回int类型】
- //从源中获取一批数据到缓冲区中,需要先做判断,只有计数器为0时,才需要
- //从源中获取数据.
- if(count == 0){
- count = r.read(buf);
- //每次获取数据到缓冲区后,角标归零
- pos = 0;
- }
- if(count<0)
- return -1;
-
- char ch = buf[pos];
- pos++;
- count--;
- return ch; //【<------我的问题在这里!!】方法声明中指定返回的是int类型,为什么这里可以返回char类型?不报错,并且运行正常,是因为抛了IO异常吗?
- }
- 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{
- r.close();
- }
- }
- public class _13BufferTest {
- public static void main(String[] args) throws IOException {
- FileReader fr = new FileReader("IoDemo.txt");
- MyBufferedReader mbr = new MyBufferedReader(fr);
- String line = null;
- while((line=mbr.myReadLine())!=null){
- System.out.println(line);
- }
- mbr.myClose();
- }
- }
复制代码
请看代码中的myRead()方法,方法声明中指定返回的是int类型,为什么这里可以返回char类型?不报错,并且运行正常,是因为抛了IO异常吗?
在下百思不得其解!还请赐教!鄙人不胜感激!~~恭喜发财~
|
|