【Java之IO】2.缓冲区

来源:互联网 发布:阿里云cdn怎么收费 编辑:程序博客网 时间:2024/06/06 19:05
  • 缓冲区提高对数据的读写效率

    这里写图片描述

一、字符流缓冲

  • BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、字符串、数组的高效写入。
    • 提供newLine()方法,使用平台自己的换行符概念
    • 提高流的效率,所以需要接收流对象
  • BufferedReader:可以按行读readLine()
//BufferedWriterpublic class Demo {    public static void main(String[] args) throws IOException {        FileWriter fw = new FileWriter("Demo(1).txt");        BufferedWriter bufw = new BufferedWriter(fw);          for (int i = 0; i < 3; i++) {            bufw.write("12345");//数据存在缓冲区            bufw.newLine();        }        bufw.flush();//将数据写入到目的地        fw.close();//关闭缓冲区就已经关闭了流对象    }}//BufferedReaderpublic class Demo {    public static void main(String[] args) throws IOException {        FileReader fr = new FileReader("Demo(1).txt");        BufferedReader bufr = new BufferedReader(fr);          String line = null;        while ((line = bufr.readLine()) != null) {            sopl(line);        }        fr.close();    }}

二、字节流缓冲

  • BufferedInputStream
  • BufferedOutputStream
public class Demo {    public static void main(String[] args) throws IOException {        FileInputStream fip = new FileInputStream("E:\\BaiduYunDownload\\JAVA\\IO\\08_PrintIO.avi");        BufferedInputStream bf = new BufferedInputStream(fip);        FileOutputStream fop = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\08.avi");        BufferedOutputStream bp = new BufferedOutputStream(fop);        //建议使用这种方式        int ch = 0;        while((ch = bf.read()) != -1) {            bp.write(ch);//字节流直接写入目的地,不需要刷新        }        bf.close();        bp.close();    }}

三、自定义缓冲区

//自定义的读取缓冲区,模拟BufferedReader/* * 分析: * 缓冲区中无非就是封装了一个数组 * 并对外提供了更多的方法对数组进行访问 * 其实这些方法最终操作的都是数组的角标 *  * 缓冲的原理: * 就是从源中获取一批数据送到缓冲区 * 再从缓冲区中不断的取出一个一个数据 * 在取完后,继续从源中获取一批数据送到缓冲区,当源中数据取光时,用-1作为结束标记 */public class Demo {    private FileReader r;    //定义一个数组作为缓冲区    char[] c = new char[1024];    //定义一个角标指针    int p = 0;    //定义计数器    int count = 0;    Demo(FileReader r) {        this.r = r;    }    public int myRead() throws IOException {        if(count == 0) {            count = r.read(c);            p = 0;        }        if(count < 0) {            return -1;        }        int ch = c[p++];        count--;        return ch;      }    public String myReadLine() throws IOException {        StringBuilder b = new StringBuilder();        int ch = 0;        while((ch = myRead()) != -1) {            if(ch == '\r')                continue;            if(ch == '\n')                return b.toString();            b.append((char)ch);        }        if(b.length() != 0) {//判断缓冲区里面是否还有数据            return b.toString();        }        //存完返回空        return null;    }    public void myClose() throws IOException {        r.close();    }    public static void main(String[] args) throws IOException {        FileReader r = new FileReader("Demo(1).txt");        Demo d = new Demo(r);        String line = null;        while((line = d.myReadLine()) != null) {            sopl(line);        }        d.myClose();    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 40天宝宝肚脐凸怎么办 6个月婴儿消化不好怎么办 2个月婴儿消化不好怎么办 10月婴儿不吃饭怎么办 9个月宝宝不吃饭怎么办 十个多月的宝宝便秘怎么办 十个多月宝宝便秘怎么办 8个月宝宝过敏怎么办 宝宝二十个月便秘怎么办 7个月宝宝便秘拉不出怎么办 二十六个月宝宝便秘怎么办 八个月宝宝吃鸡蛋过敏怎么办 8个月宝宝 吃盐怎么办 40多天婴儿拉肚怎么办 刚出生婴儿拉肚怎么办 20多天婴儿拉肚怎么办 米汤煮的太稠了怎么办 两岁宝宝不吃蔬菜怎么办 两岁宝宝不爱吃蔬菜怎么办 四个月宝宝头有点歪怎么办 宝宝吃过了还闹怎么办 ddrops d3吃多了怎么办 ddrops d3滴多了怎么办 维生素d滴多了怎么办 ddrops最后滴不出来的怎么办 ddrops一次滴3滴怎么办 小孩子头睡偏了怎么办 7岁儿童头睡偏了怎么办 婴儿后脑睡平了怎么办 六个月宝宝免疫力低怎么办 十个月宝宝食烧怎么办 6个月宝宝感冒了怎么办 5个月宝宝腿短怎么办 5个月宝宝太瘦怎么办 宝宝喝了浓奶粉怎么办 一岁把尿不尿怎么办 五个月的宝宝大便干燥怎么办 婴儿便秘怎么办什么方法最有效 8个月小孩便秘怎么办 1个月新生儿便秘怎么办 新生儿头竖立0分怎么办