Java的字节缓冲流与字符缓冲流解析

 更新时间:2023年11月01日 09:43:24   作者:追光而遇  
这篇文章主要介绍了Java的字节缓冲流与字符缓冲流解析,Java 缓冲流是Java I/O库中的一种流,用于提高读写数据的效率,它通过在内存中创建缓冲区来减少与底层设备的直接交互次数,从而减少了I/O操作的开销,需要的朋友可以参考下

高级流

  • 缓冲流
  • 转换流
  • 序列化流
  • 打印流
  • 压缩流
  • Commons-io

在这里插入图片描述

缓冲流

基本流的效率太慢了,都加上缓冲区

在这里插入图片描述

 字节缓冲流

原理:底层自带了长度为8192的缓冲区提高性能

方法名称说明
public BufferedInputStream(InputStream is)把基本流包装成高级流,提高读取数据的性能
public BufferedOutputStream(OutputStream os)把基本流包装成高级流,提高读取数据的性能

练习:拷贝文件

  • 利用字节缓冲流拷贝文件(一次读写一个字节)
public class BufferedStreamDemo1 {
    public static void main(String[] args) throws IOException {

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/Users/jessy/Desktop/offer50/aaa/aaacopy.txt"));

        int b;
        while ((b = bis.read()) != -1) {
            bos.write(b);
        }
        
        bos.close();
        bis.close();
    }
}
  • 利用字节缓冲流拷贝文件(一次读写一个字节数组)
public class BufferedStreamDemo2 {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/Users/jessy/Desktop/offer50/aaa/aaacopy.txt"));

        byte[] bytes = new byte[1024];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }

        bos.close();
        bis.close();
    }
}

字节缓冲流提高效率的原理

在这里插入图片描述

字符缓冲流

原理:底层自带了长度为8192的缓冲区提高性能

方法名称说明
public BufferedReader(Reader r)把基本流变成高级流
public BufferedWriter(Writer r)把基本流变成高级流
  • 特有方法
字符缓冲输入流特有方法说明
public String readLine()读取一行数据,如果没有数据可读了,会返回null
  •  细节:
    • readLine方法在读取的时候,一次读一整行,遇到回车换行结束
    • 但是他不会把回车换行读到内存当中
字符缓冲输出流特有方法说明
public void newLine()跨平台的换行 
public class BufferedStreamDemo3 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));

        String line;
        while (((line = br.readLine()) != null)) {
            System.out.println(line);
        }

        br.close();
    }
}
public class BufferedStreamDemo4 {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/jessy/Desktop/offer50/aaa/b.txt", true));

        bw.write("朵朵是猫猫呀!!");
        //换行
        bw.newLine();

        bw.write("可是你不是猫猫!");
        bw.newLine();

        bw.close();
    }
}

总结

  • 缓冲流有几种?
    • 字节缓冲输入流 BufferedInputStream
    • 字节缓冲输出流 BufferedOutputStream
    • 字符缓冲输入流 BufferedReader
    • 字符缓冲输出流 BufferedWriter
  • 缓冲流为什么能提高性能
    • 缓冲自带长度为8192的缓冲区
    • 可以显著提高字节流的读写性能
    • 对于字符流提升不明显,对于字符缓冲流而言关键点是两个特有方法
  • 字符缓冲流两个特有方法是什么?
    • 字符缓冲输入流BufferedReader :readLine()
    • 字符缓冲输出流 BufferedWriter:newLine()

到此这篇关于Java的字节缓冲流与字符缓冲流解析的文章就介绍到这了,更多相关Java的字节字符缓冲流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java容器HashMap与HashTable详解

    Java容器HashMap与HashTable详解

    本文主要介绍HashMap 和 Hashtable的工作原理和使用方法,有兴趣的朋友可以参考
    2017-04-04
  • Java比较两个对象大小的三种方法详解

    Java比较两个对象大小的三种方法详解

    在优先级队列中插入的元素必须能比较大小,如果不能比较大小,如插入两个学生类型的元素,会报ClassCastException异常。本文就为大家总结了Java比较两个对象大小的三种方法,需要的可以参考一下
    2022-07-07
  • Spring扩展点之BeanFactoryPostProcessor详解

    Spring扩展点之BeanFactoryPostProcessor详解

    这篇文章主要介绍了Spring扩展点之BeanFactoryPostProcessor详解,Spring的设计非常优雅,有很多的扩展点供我们对项目进行扩展,今天学习一下Spring其中扩展点之一的BeanFactoryPostProcessor,需要的朋友可以参考下
    2023-11-11
  • SpringCloud超详细讲解负载均衡组件Ribbon源码

    SpringCloud超详细讲解负载均衡组件Ribbon源码

    在微服务中,对服务进行拆分之后,必然会带来微服务之间的通信需求,而每个微服务为了保证高可用性,又会去部署集群,那么面对一个集群微服务进行通信的时候,如何进行负载均衡也是必然需要考虑的问题
    2022-07-07
  • IDEA上运行Flink任务的实战教程

    IDEA上运行Flink任务的实战教程

    这篇文章主要介绍了IDEA上运行Flink任务的实战教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • MyBatis实现多表联合查询resultType的返回值

    MyBatis实现多表联合查询resultType的返回值

    这篇文章主要介绍了MyBatis多表联合查询resultType的返回值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java多线程之线程状态的迁移详解

    Java多线程之线程状态的迁移详解

    线程状态迁移,又常被称作线程的生命周期,指的是线程从创建到终结需要经历哪些状态,什么情况下会出现哪些状态.线程的状态直接关系着并发编程的各种问题,本文就线程的状态迁移做一初步探讨,并总结在何种情况下会出现这些状态,需要的朋友可以参考下
    2021-06-06
  • JAVA十大排序算法之快速排序详解

    JAVA十大排序算法之快速排序详解

    这篇文章主要介绍了java中的快速排序,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Spring Bean中的六种作用域你了解吗

    Spring Bean中的六种作用域你了解吗

    Bean的作用域是指Bean实例的生命周期及可见性范围,Spring框架定义了6种作用域,本文就来和大家聊聊这6种作用域的定义与使用,希望对大家有所帮助
    2023-09-09
  • Java选择结构与循环结构的使用详解

    Java选择结构与循环结构的使用详解

    循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环,选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程
    2022-03-03

最新评论