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的字节字符缓冲流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JDK序列化Bug难题解决示例详解

    JDK序列化Bug难题解决示例详解

    这篇文章主要为大家介绍了JDK序列化Bug难题解决示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • SpringBoot @RestControllerAdvice注解对返回值统一封装的处理方法

    SpringBoot @RestControllerAdvice注解对返回值统一封装的处理方法

    这篇文章主要介绍了SpringBoot @RestControllerAdvice注解对返回值统一封装,使用@RestControllerAdvice对响应进行增强,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 深度解析Java中的ReentrantLock原理

    深度解析Java中的ReentrantLock原理

    这篇文章主要介绍了关于ReentrantLock的原理解析,文章通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • JAVA通过HttpURLConnection 上传和下载文件的方法

    JAVA通过HttpURLConnection 上传和下载文件的方法

    这篇文章主要介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • java文本处理之计算文本句子数

    java文本处理之计算文本句子数

    这篇文章主要为大家详细介绍了java文本处理之计算文本句子数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • SpringBoot配置拦截器的示例

    SpringBoot配置拦截器的示例

    这篇文章主要介绍了SpringBoot配置拦截器的示例,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-11-11
  • java使用RSA工具进行信息加解密

    java使用RSA工具进行信息加解密

    我们在开发中需要对用户敏感数据进行加解密,比如密码等信息,这篇文章主要为大家详细介绍了java如何使用RSA工具进行信息加解密,感兴趣的小伙伴可以了解下
    2023-12-12
  • 解读jdk动态代理为什么必须实现接口

    解读jdk动态代理为什么必须实现接口

    这篇文章主要介绍了解读jdk动态代理为什么必须实现接口问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java去掉字符串最后一个逗号的方法

    Java去掉字符串最后一个逗号的方法

    Java中去掉字符串的最后一个逗号有多种实现方法,不同的方法适用于不同的场景,本文通过实例代码介绍Java去掉字符串最后一个逗号的相关知识,感兴趣的朋友一起看看吧
    2023-12-12
  • IntelliJ Idea2017如何修改缓存文件的路径

    IntelliJ Idea2017如何修改缓存文件的路径

    这篇文章主要介绍了IntelliJ Idea2017如何修改缓存文件的路径,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论