栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

铂西学习日记---缓冲流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

铂西学习日记---缓冲流

字节缓冲流

1.输出字节缓冲流:

    public static void byteWriter(){
        File file = new File("1.txt");
        try {
            OutputStream out = new FileOutputStream(file);
            //使用缓冲流--构造一个字节缓冲流
            BufferedOutputStream bos = new BufferedOutputStream(out);
            String info = "hah挂失对岸是个";
            bos.write(info.getBytes());
            //关闭缓冲流
            //关闭缓冲流时流的内容就刷新了,或者手动刷新
            bos.close();
            //关闭缓冲流时已经做过了-----关闭字节输出流 JDK1.7后
//            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 点击缓冲流的close()方法可以看到如下,使用Try确保字节输出流关闭,然后刷新缓存的流:

点开BufferedOutputStream时,会看到默认缓存为8kb:

每次写入时存储到缓存中的byte数组中,当数组存满时或刷新流时才会真正写入文件,并且缓存下标归零:

2.输入字节缓冲流:

    //输入字节缓冲流
    public static void byteReader(){
        File file = new File("1.txt");
        try {
            InputStream in = new FileInputStream(file);
            //使用缓冲流--构造一个字节缓冲流
            BufferedInputStream bis = new BufferedInputStream(in);
            byte[] bytes = new byte[1024];
            int len = -1;
            StringBuilder sb = new StringBuilder();
            while ((len=bis.read(bytes))!=-1){
                sb.append(new String(bytes,0,len));
            }
            System.out.println(sb);
            //关闭缓冲流
            //关闭缓冲流时流的内容就刷新了,或者手动刷新
            bis.close();
            //关闭缓冲流时已经做过了-----关闭字节输出流 JDK1.7后
//            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

同样的,字节输入流缓存也是默认8KB,关闭字节输入缓冲流时也会关闭字节输入流,我们点开查看源码可以看到:

 使用Try去自动关闭流,以上代码就变成了:

    //输入字节缓冲流
    public static void byteReader(){
        File file = new File("1.txt");
        //使用Try自动关闭流
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))){
            //核心内容
            byte[] bytes = new byte[1024];
            int len = -1;
            StringBuilder sb = new StringBuilder();
            while ((len=bis.read(bytes))!=-1){
                sb.append(new String(bytes,0,len));
            }
            //输出结果
            System.out.println(sb);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

字符缓冲流

与上面的许多过程相似(如:通过Try,流被自动关闭)

  
    //输出字符缓冲流
    public static void charWriter(){
        File file = new File("1.txt");
        try {
            Writer writer = new FileWriter(file,true);
            //为字符流提供缓冲,已达到高效读取的目的
            BufferedWriter bw = new BufferedWriter(writer);
            String info = "adasd奥哈";
            bw.write(info);
            //writer自动关闭
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //输入字符缓冲流
    public static void charReader(){
        File file = new File("1.txt");
        try {
            Reader reader = new FileReader(file);
            //为字符流提供缓冲,已达到高效读取的目的
            BufferedReader br = new BufferedReader(reader);
            char[] chars = new char[1024];
            int len = -1;
            while ((len=br.read(chars))!=-1){
                System.out.println(new String(chars,0,len));
            }
            //reader自动关闭
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/720531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号