今天想自己写个缓冲流玩下,当写的时候发现困难重重
最难点是你要自己实现一个缓冲池用来存放数据
而你取数据的时候是只能从缓冲池中去取出数据
缓冲的数据是纯入内存当中,这样读取缓冲数据的时候会大大提高效率
有木有大神实现了一个IO缓冲流 最主要是要实现了缓冲池的实现
求助------下面这个是我自己实现的缓冲字符流 但是只实现了readline方法
- package test2;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.Reader;
- /**
- * 自定义缓冲字符流
- * 难点: 如果要实现一个类似缓冲流的缓冲区 这个问题还没想透彻
- * @author 李昂志
- */
- public class MyBufferedReader extends Reader{
- private static int bufferdSize = 9999; //字符缓冲区原始数据量大小
- private Reader in = null;
- private char[] cs; //用来存储字符缓冲的数据
-
- /**
- * 自定义的缓冲池
- * @param in
- * @param size
- */
- public MyBufferedReader(Reader in , int size){
- super(in);
- if(size<=0){
- throw new IllegalArgumentException("Buffer size <= 0");
- }
- MyBufferedReader.bufferdSize = size;
- this.in = in;
- }
- /**
- * 使用默认的缓冲池
- * @param in
- */
- public MyBufferedReader(Reader in){
- this(in,bufferdSize);
- }
- /**
- * 此方法空实现,这个地方读取要去读取缓存池,无解中
- */
- @Override
- public int read(char[] cbuf, int off, int len) throws IOException {
-
- return in.read(cbuf, off, len);
- }
- /**
- * 读取一行文本 ,读到换行处则 退出
- * 因为只要读取一行数据,一行数据的数据量一般较小 所以对缓冲池的要求不高 这里是模仿了老师的 完善了一点而已
- * @return 读取一行的文本 字符串
- * @throws IOException
- */
- public String readline() throws IOException{
- StringBuilder sb = null;
- char c ='A';
- if(cs == null) cs = new char[bufferdSize];
-
- int i,j =0;
- while((i = in.read()) != -1){
- if(sb == null){
- sb = new StringBuilder();
- }
- c = (char) i;
- if ( c == '\r') continue;
- if ( c == '\n') break;
- cs[j++] = c;
- }
- if(sb != null ) sb.append(cs ,0 ,j);
- else return null;
- return sb.toString();
- }
- /**
- * 获取缓冲池大小
- * @return
- */
- public int getBufferdSize() {
- return bufferdSize;
- }
- @Override
- public void close() throws IOException {
- // TODO Auto-generated method stub
- if(in != null){
- in.close();
- }
- }
- public static void main(String[] args) throws IOException {
- System.out.println("----");
- MyBufferedReader in = new MyBufferedReader(new FileReader("abc.txt"));
- String s = null;
- while((s = in.readline())!= null){
- System.out.println(s);
- }
- in.close();
- }
- }
复制代码
|