BufferWriter类解析

在这里插入图片描述

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

文章目录

  • 前言
  • 摘要
  • BufferedWriter类
    • 概述
    • 源代码解析
    • 应用场景案例
    • 优缺点分析
    • 类代码方法介绍
    • 测试用例
      • 代码演示
      • 测试结果
      • 代码分析
    • 全文小结
    • 附录源码
  • 总结
  • ☀️建议/推荐你
  • 📣关于我

前言

  在Java的IO包中,BufferedWriter类是一个非常常用的类。它主要用来写入文本数据,具有缓冲功能,可以提高写入效率,减少底层IO操作的次数。在实际的开发中,我们经常使用BufferedWriter类来处理文本文件的写操作。

摘要

  本文主要介绍了Java中BufferedWriter类的使用方法、源代码解析、应用场景案例、优缺点分析、类代码方法介绍和测试用例。通过本文的学习,读者可以深入了解BufferedWriter类的功能和使用方式,从而更好地应用该类进行文本写入操作。

BufferedWriter类

概述

  BufferedWriter类是Java IO包中的一个类,是Writer类的子类,用于写入文本数据。它具有缓冲功能,可以提高写入效率,并减少底层IO操作的次数,节约系统资源。BufferedWriter类提供了丰富的方法,可以满足各种不同的文本写入操作需求。

  以下是BufferedWriter类的继承关系图,供大家认清这些IO类之间的关联关系:

              Writer
                |
          OutputStreamWriter
                |
             BufferedWriter

解析:

  • BufferedWriter类是OutputStreamWriter类的子类,而OutputStreamWriter类又是Writer类的子类。
  • 因此,BufferedWriter类继承了Writer类和OutputStreamWriter类的方法,同时也有自己独特的方法。

  下面我们将具体介绍该类的使用方法和相关细节等知识点,同学们继续往下看。

源代码解析

在Java的IO包中,BufferedWriter类的源代码如下:

public class BufferedWriter extends Writer {
    private Writer out;
    private char cb[];
    private int nChars, nextChar;

    private static final int defaultCharBufferSize = 8192;
    private static final int defaultExpectedLineLength = 80;

    ...
}

  BufferedWriter类是Writer类的子类,因此它可以使用Writer类的所有方法。BufferedWriter类中主要包含了三个私有属性:

  1. out:表示真正执行写操作的Writer对象。

  2. cb:表示字符缓冲区数组,用于暂存待写入的字符。

  3. nChars和nextChar:分别表示缓冲区中字符的个数和下一个字符的位置。

  其中对于BufferedWriter类,它类中还定义了两个常量,具体如下:

  1. defaultCharBufferSize:表示字符缓冲区的默认大小,为8192个字符。

  2. defaultExpectedLineLength:表示每行文本数据的默认长度,为80个字符。

部分源码如下:
在这里插入图片描述

应用场景案例

  BufferedWriter类主要用于文本数据的写入操作,因此在开发中,我们经常使用该类来处理各种文本写入需求。下面是几个应用场景案例:

  1. 将内存中的数据写入到文本文件中。

  2. 将控制台输入的数据写入到文本文件中。

  3. 将网络传输的数据写入到文本文件中。

  4. 在多线程环境下,使用BufferedWriter类来进行数据同步写入。

  5. 在Web开发中,使用BufferedWriter类来动态生成HTML代码。

优缺点分析

  BufferedWriter类作为Java IO包中的一个重要类,具有以下几个优点:

  1. 缓冲功能可以提高写入效率,减少底层IO操作的次数,节约系统资源。

  2. 提供了丰富的方法,可以满足不同的文本写入操作需求。

  3. 可以与其他Java IO类组合使用,实现更高级的功能。

  4. 可以在多线程环境下安全地进行写操作。

然而,BufferedWriter类也有一些不足之处:

  1. 仅适用于文本数据的写入,无法处理二进制数据。

  2. 当缓冲区满时,需要将缓冲区中的数据全部写入到底层IO流中,可能导致性能下降。

类代码方法介绍

  BufferedWriter类提供了丰富的方法,可以满足不同的文本写入操作需求。下面是一些常用的方法介绍:

方法名用途
write(int c)将指定的字符写入到缓冲区中。
write(char[] cbuf)将指定的字符数组写入到缓冲区中。
write(char[] cbuf, int off, int len)将指定的字符数组中的一部分写入到缓冲区中。
write(String str)将指定的字符串写入到缓冲区中。
write(String str, int off, int len)将指定的字符串中的一部分写入到缓冲区中。
flush()将缓冲区的所有数据写入到底层IO流中。
close()关闭该输出流并释放与该流关联的所有系统资源。

  如上就是我自认为BufferedWriter类的一些常用方法,如果你想了解更多,可以去专研下它的源码,绝对收获颇多。

测试用例

  下面是一个简单的测试用例,用于演示如何使用BufferedWriter类将数据写入到指定的文本文件中:

代码演示

package com.example.javase.io.writer.bufferedWriter;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author bug菌
 * @version 1.0
 * @date 2023/10/19 10:41
 */
public class BufferedWriterTest {

    public static void main(String[] args) throws IOException {
        // 创建一个文件写入流
        FileWriter fileWriter = new FileWriter("./template/fileTest.txt");

        // 创建一个缓冲区写入流
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        // 写入文本数据
        bufferedWriter.write("hello world,jym!!!");

        // 刷新缓冲区
        bufferedWriter.flush();

        // 关闭缓冲区写入流和文件写入流
        bufferedWriter.close();
        fileWriter.close();
    }
}

测试结果

如下是通过如上测试用例所进行测试执行产生的结果,截图如下:

在这里插入图片描述

代码分析

  根据如上 测试用例,我给大家具体讲解下该测试用例的实现过程,以帮助同学们能更快的掌握它。如上代码是一个演示了如何使用 BufferedWriter 类来写入文本数据到文件中的一个功能演示。

  首先,创建一个 FileWriter 对象,用于表示要写入的文件,同时创建一个 BufferedWriter 对象,用于将数据写入缓冲区中。

  接着,使用 BufferedWriter 对象的 write() 方法,向缓冲区中写入文本数据。

  最后,使用 flush() 方法将缓冲区中的数据刷新到文件中,并使用 close() 方法关闭缓冲区写入流和文件写入流。

  需要注意的是,在所有操作完成后,需要及时关闭流对象,以释放资源并避免数据丢失。

全文小结

  本文主要介绍了Java IO包中的BufferedWriter类,包括其源代码解析、应用场景案例、优缺点分析、类代码方法介绍和测试用例。通过本文的学习,读者可以深入了解BufferedWriter类的功能和使用方式,从而更好地应用该类进行文本写入操作。

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

  BufferedWriter类是Java IO包中的一个重要类,具有高效的文本写入功能。在实际的开发中,我们经常使用该类来处理各种文件写入需求。通过本文的学习,读者可以掌握该类的基本使用方法、源代码细节、应用场景案例和优缺点分析等方面的知识,更好地应用该类进行文本写入操作。

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

  我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/455186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LLMs+小羊驼】23.03.Vicuna: 类似GPT4的开源聊天机器人( 90%* ChatGPT Quality)

官方在线demo: https://chat.lmsys.org/ Github项目代码:https://github.com/lm-sys/FastChat 官方博客:Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90% ChatGPT Quality 模型下载: https://huggingface.co/lmsys/vicuna-7b-v1.5 | 所有的模…

基于恒功率PQ控制的三电平并网逆变器MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 三相 T 型三电平逆变器电路如图所示,逆变器主回路由三个单相 T 型逆变器组成。 直流侧输入电压为 UPV,直流侧中点电位 O 设为零电位,交流侧输出侧是三相三线制连…

《互联网的世界》第七讲-能源

本想聊聊 tcp 和 quic,但这些都属于术的范畴,变化多端,等孩子们长大了又不知变成什么样子了,趁这段时间在家,还是得讲一些相对不变的东西,或法或势。 从 安阳卖血糕的精巧篦子 想到如何做圆米粉和圆面条&a…

[ThinkPHP]Arr返回1

$detailId (int)Arr::get($detail, null); var_dump($detailId); 打印结果:int(1) 原因: vendor/topthink/think-helper/src/helper/Arr.php

Python使用openpyxl库或pandas库创建.xlsx格式的Excel文件,并向文件不同的sheet按行或按列写入内容

import openpyxl# 创建-一个Workbook对象 wb openpyxl.Workbook()# 创建多个工作表 sheet1 wb.active sheet1.title "s1"sheet2 wb.create_sheet("s2")# 在不同的工作表中写入数据 sheet1["A1"] Data for Sheet1 sheet1["A2"] D…

一.java介绍和idea基础使用

java技术体系 Java技术体系说明Java SE(Java standard Edition):标准版Java技术的核心和基础Java EE(Java Enterprise Edition):企业版企业级应用开发的一套解决方案Java ME(Java Micro Edition):小型版针对移动设备应用的解决方案(认可少,主要是安卓和…

Netty线程模型详解

文章目录 概述单Reactor单线程模型单Reactor多线程模型主从Reactor多线程模型 概述 Netty的线程模型采用了Reactor模式,即一个或多个EventLoop轮询各自的任务队列,当发现有任务时,就处理它们。Netty支持单线程模型、多线程模型和混合线程模型…

彩虹知识付费模板MangoA全开源包含秒杀/抽奖/社群/推送等功能

二次开发增加以下功能每日秒杀每日签到官方社群多级分销在线抽奖项目投稿 每日秒杀 每日签到 官方社群 多级分销 在线抽奖 项目投稿 下载地址:https://pan.xunlei.com/s/VNstMfOecGliiqew7UIorsOnA1?pwdhywi#

Flink 的时间属性及原理解析

Flink的API大体上可以划分为三个层次:处于最底层的ProcessFunction、中间一层的DataStream API和最上层的SQL/Table API,这三层中的每一层都非常依赖于时间属性。时间在Flink中的地位如下图所示: 时间属性是流处理中最重要的一个方面&#…

cms垃圾回收

cms垃圾回收 CMS概述CMS收集器整体流程初始标记并发标记重新标记并发清除 CMS卡表什么是卡表(card table)什么是mod-union table CMS概述 CMS(Concurrent Mark Sweep)收集器是Java虚拟机中的一种老年代(old Generation)垃圾收集器,他主要目标是减少垃圾收集时的应用…

数据库基础知识超详细解析~‍(进阶/复习版)

文章目录 前言一、数据库的操作1.登入数据库2.创建数据库3.显示当前数据库4.使用数据库5.删除数据库 二、常用数据类型三、数据库的约束1约束类型2NULL约束3UNIQUE:唯一约束4DEFAULT:默认值约束5 PRIMARY KEY:主键约束6 FOREIGN KEY:外键约束…

STM32第十课:串口发送

一、usart串口 1.1 USART串口协议 串口通讯(Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里&…

2024年云仓酒庄:店中店增项新模式,开启葡萄酒文化新篇章

2024云仓酒庄:店中店增项新模式,开启葡萄酒文化新篇章 在葡萄酒行业蓬勃发展的今天,云仓酒庄以其独特的经营模式和创新思维,在市场中脱颖而出。2024年,云仓酒庄继续深化其战略布局,不仅在多地开设酒庄实体…

【论文笔记合集】Transformers in Time Series A Survey综述总结

本文作者: slience_me 文章目录 Transformers in Time Series A Survey综述总结1 Introduction2 Transformer的组成Preliminaries of the Transformer2.1 Vanilla Transformer2.2 输入编码和位置编码 Input Encoding and Positional Encoding绝对位置编码 Absolute …

Redis到底是单线程还是多线程!,【工作感悟】

无论你是做 Python,PHP,JAVA,Go 还是 C#,Ruby 开发的,都离不开使用 Redis。 大部分程序员同学工作中都有用到 Redis,但是只限于会简单的使用,对Redis缺乏整体的认知。 无论是在大厂还是在中小…

pkav之当php懈垢windows通用上传缺陷

环境&#xff1a; Windowsnginxphp 一、php源码 <?php //U-Mail demo ... if(isset($_POST[submit])){$filename $_POST[filename];$filename preg_replace("/[^\w]/i", "", $filename);$upfile $_FILES[file][name];$upfile str_replace(;,&qu…

01-java入门了解--cmd命令、jdk、java的认识

cmd常用命令 java入门需要安装的环境 jdk。&#xff08;下载好jdk&#xff0c;并配置好环境&#xff09;idea。&#xff08;或者其他的编程工具&#xff09; jdk安装目录介绍 第一步&#xff1a;编写程序&#xff08;程序员写.java后缀的文件&#xff09; 第二步&#xff1a;…

【MMDetection3D实战(1)】:环境安装

1.介绍 MMDetection3D首次发布于2018年10月&#xff0c;是面向3D 场景中检测和分割的工具包&#xff0c;可以基于MMDetection3D实现基于点云、图像和多模态数据的3D检测与分割。github仓库地址:https://github.com/open-mmlab/mmdetection3d 目前MMDetection3D支持20多种不同的…

FastWiki v0.1.0发布!新增超多功能

FastWiki 发布 v0.1.0 https://github.com/239573049/fast-wiki/releases/tag/v0.1.0 更新日志 兼容OpenAI接口格式删除Blazor版本UI删除useEffect,解决可能存在问题的bug修复对话可以看到所有对话Merge branch ‘master’ of https://gitee.com/hejiale010426/fast-wiki更新…

【测试】1. 概念 + 基础篇

概念篇 测试相较于开发岗位而言&#xff0c;如果同学们的编程能力稍微弱一些&#xff0c;可以尝试测试方向&#xff08;更简单&#xff09; 1. 什么是软件测试 最常见的理解是&#xff1a;软件测试就是找BUG&#xff0c;发现缺陷。 早期&#xff0c;人们更多的将测试看成是对…