黑马程序员技术交流社区
标题:
BufferedReader缓冲区
[打印本页]
作者:
冯晓骏
时间:
2013-10-23 20:27
标题:
BufferedReader缓冲区
BufferedReader缓冲区与Reader的read(char[])方法有什么区别,还是缓冲区就是用这个方法实现的,只不过读的多了些,刚刚看了一眼源码,什么len,MARK的,没太看懂,希望有同样疑惑的同学把想法拿出来交流一下
作者:
完美恋爱
时间:
2013-10-23 20:36
输入字符流:Reader: 字符读取流的抽象类
|--->FileReader:
字符读取流
|--->LineNumberReader:
跟踪行号的缓冲字符读取流
|--->BufferedReader:
字符读取流缓冲区
|--->InputStreamReader:
字节通向字符的转换流(涉及键盘录入时用)
作者:
Stephen_Chow
时间:
2013-10-23 20:53
有区别的,BufferedReader缓冲区可以方便的读一行(readLine()),字符读取流最方便的就是读取一行。 而Reader的read(char[])方法,是一次读取指定数组长度的数据。所以是不一样的。
readline的原理:无论读一行,还是读多个数据,其实最终嗾使在硬盘上一个一个的读取。所以最终使用的是read()方法一次一个的读。认真读下面的代码,你就会明白了
具体可参考毕——传智播客毕向东Java基础视频教程-day19-05-IO流(MyBufferedReader)。
/*
明白了BufferedReader类中特有方法readLine的原理后,
可以自定义一个类中包含一个功能和readLine一致的方法。
来模拟一下BufferedReader
*/
import java.io.*;
class MyBufferedReader extends Reader
{
private Reader r;
MyBufferedReader(Reader r)
{
this.r = r;
}
//可以一次读一行数据的方法。
public String myReadLine()throws IOException
{
//定义一个临时容器。原BufferReader封装的是字符数组。
//为了演示方便。定义一个StringBuilder容器。因为最终还是要将数据变成字符串。
StringBuilder sb = new StringBuilder();
int ch = 0;
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
/*
覆盖Reader类中的抽象方法。
*/
public int read(char[] cbuf, int off, int len) throws IOException
{
return r.read(cbuf,off,len) ;
}
public void close()throws IOException
{
r.close();
}
public void myClose()throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("buf.txt");
MyBufferedReader myBuf = new MyBufferedReader(fr);
String line = null;
while((line=myBuf.myReadLine())!=null)
{
System.out.println(line);
}
myBuf.myClose();
}
}
复制代码
作者:
乔兵
时间:
2013-10-25 08:18
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续提问,谢谢合作
修改方法请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
作者:
冯晓骏
时间:
2013-10-25 14:01
Stephen_Chow 发表于 2013-10-23 20:53
有区别的,BufferedReader缓冲区可以方便的读一行(readLine()),字符读取流最方便的就是读取一行。 ...
那么所谓缓冲区怎么提高了效率呢,照你说的磁头的擦写次数肯定是一样多的,那么是减少了与底层硬盘的通信次数么?
作者:
枫儿
时间:
2013-10-25 16:00
可以多看几遍视频
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2