Java - 字符流缓冲区 - BufferedReader - BufferedWriter

来源:互联网 发布:武汉网络电视 编辑:程序博客网 时间:2024/05/17 07:50
public class BuffDemo {/* * 用缓冲区复制文件。 *  ***/public static void main(String[] args) throws Exception {//创建读取流FileReader fr = new FileReader("abc.txt");//创建读取流缓冲区BufferedReader bufr = new BufferedReader(fr);//创建输出流FileWriter fw = new FileWriter("abc6.txt");//创建输出流缓冲区BufferedWriter bufw = new BufferedWriter(fw);String line = null;while((line = bufr.readLine())!=null){bufw.write(line);bufw.newLine();bufw.flush();//养成好习惯}/*//这个数组和缓冲区里的数组是不一样的,他是用来装从缓冲区数组读取的字符。也就是说每次从数组中取出10个字符。char[] ch = new char[10];int len = 0;while((len=bufr.read(ch))!=-1){bufw.write(ch);bufw.flush();}*/bufr.close();bufw.close();}}

/**** * 用装饰设计模式 模仿BufferedReader功能,也就是模仿一个缓冲区。 BufferedReader的本质是对Reader流对象的功能扩展 *  * 分析: 缓冲区其实就是在缓冲区中封装了一个数组, 对外提供访问,操作数组的方法, 其实这些方法最终操作的都是数组的角标。 *  * BufferedReader的原理: 从源文件中读取数据存放在数组中 *  * */public class MyBufferedReader{private Reader r;private char[] cbuf = new char[1024];// 从源文件读取的字符数int len = 0;int i = 0;MyBufferedReader(Reader r) {this.r = r;}/* * myread模仿了BufferedReader 的 read方法。其实他操作的是缓冲区的数组。 * 就是把源文件的数据读入数组中,然后一个一个的取出来。取完数组再接着读源文件。 * 如果源文件读完了,就返回-1. */public int myread() throws IOException {if (len == 0) {len = r.read(cbuf);i = 0;}if (len < 0) {return -1;}char ch = cbuf[i];i++;len--;return ch;}/* * myreadLine模仿了BufferedReader 的 readLine方法 。其实他是调用BufferedReader 的 read方法 * read把源文件的数据存入数组,并一个一个返回。readLine把数组的数据存在了容器上。容器每次存储一行数据。 *  */StringBuilder sb = new StringBuilder();public String myreadLine() throws IOException {sb.delete(0, sb.length());int ch = 0;while((ch = myread())!=-1){if(ch == '\r')continue;//退出本次循环if(ch=='\n')//break;//退出循环return sb.toString();sb.append((char)ch);}if(sb.length()!=0){return sb.toString();}return null;}}


0 0
原创粉丝点击