Java输出流之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电子书籍、简历模板等海量资料。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 12.0 系统内存优化之修改dalvik虚拟机的内存参数

1.前言 在12.0的系统rom开发定制中,app应用也是运行在dalvik虚拟机上的,所以对于一些内存低的系统中,在某些大应用会出现耗内存 卡顿情况,这是系统分配的内存不够大,在进行耗内存的操作,就会出现频繁gc等等原因造成不流畅的现象,接下来就分析下 虚拟机分配内存的相关原理…

爬虫入门到精通_框架篇14(PySpider架构概述及用法详解)

官方文档 Sample Code: from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config {}# minutes24 * 60:每隔一天重新爬取every(minutes24 * 60)def on_start(self):self.crawl(http://scrapy.org/, callbackself.index_page)…

【C语言】Leetcode 66. 加一

文章目录 题目思路代码呈现 题目 链接: link 思路 题目的意思是把一个数以数组的形式输入,然后在这个书的末尾加一,应该是要考察,如果数加一后位数发生变化,比如9991成1000,3位数变成4位数怎么处理的。 并且我们可以…

uniapp 微信小程序和h5处理文件(pdf)下载+保存到本地+预览功能

uniapp实现微信小程序下载资源功能和h5有很大的不同,后台需返回blob文件流 1.微信小程序实现下载资源功能 步骤1:下载文件 uni.downloadFile({url:url,//调接口返回urlsuccess:(res)>{uni.hideLoading();if(res.statusCode200){var tempFilePath …

python调用clickhouse

(作者:陈玓玏) 使用clickhouse-driver包,先通过pip install clickhouse-driver安装包,再通过以下代码执行sql。 from clickhouse_driver import Client client Client(host10.43.234.214, port9000, userclickhou…

curl c++ 实现HTTP GET和POST请求

环境配置 curl //DV2020T环境下此步骤可省略 https://curl.se/download/ 笔者安装为7.85.0版本 ./configure --without-ssl make sudo make install sudo rm /usr/local/lib/curl 系统也有curl库,为防止冲突,删去编译好的curl库。 对以json数据的解析使…

主流开发语言和开发环境、程序员如何选择职业赛道?

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

C++开发基础——IO操作与文件流

一,基础概念 C的IO操作是基于字节流,并且IO操作与设备无关,同一种IO操作可以在不同类型的设备上使用。 C的流是指流入/流出程序的字节序列,在输入操作中数据从外部设备(键盘,文件,网络等)流入程序&#x…

apisix lua插件使用redis

引入 local redis require("resty.redis") local red redis:new() local redis_config { host "redis_v1", port "6379", pass "123456", db "0" } local function conn_redis() local ok, err red:connect(re…

安卓Java面试题 81- 90

81. 简述Android数字签名?Android系统要求所有的应用必须被证书进行数字签名之后才能进行安装。Android系统通过该证书来确认应用的作者,该证书是不需要权威机构认证的,一般情况下应用都是用开发者的自签名证书,该证书是确保应用程序和应用程序作者之间建立信任关系,而不是…

12 list的使用

文档介绍 文档介绍 1.list是可以在常数范围内的任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代 2.list的底层是带头双向链表循环结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和…

大话设计模式 :UML类图 原版部分

目录 原书部分总结各符号继承关系实现接口关联关系聚合关系组合关系依赖关系 原书部分 总结 各符号 ‘’ 表示public ‘-’ 表示private ‘#’表示protected 棒棒糖表示法 类内实现的接口 用棒棒糖的形状在外部具体实现 继承关系 实现接口 关联关系 聚合关系 组合关系 依赖…

Redis核心数据结构之压缩列表(二)

压缩列表 压缩列表节点的构成 encoding 节点的encoding属性记录了节点的content属性所保存数据的类型及长度: 1.一字节、两字节或者五字节长,值得最高位为00、01或者10的是字节数组编码:这种编码表示节点的content属性保存着字节数组,数组的长度由编…

SwiftUI中的Sheet推出新页面

SwiftUI中的Sheet推出新页面 记录一下SwiftUI如何从下往上推出新的页面 import SwiftUIstruct SheetBootCamp: View {State var showSheet falsevar body: some View {ZStack{Color.green.ignoresSafeArea()Button(action: {showSheet.toggle()}, label: {/*START_MENU_TOKEN…

Linux chattr命令教程:如何改变文件或目录的属性(附案例详解和注意事项)

Linux chattr命令介绍 chattr命令是change file attributes on a Linux file system的缩写,主要用于改变文件或目录的属性。这个命令允许管理员控制谁可以修改文件或目录,或者在什么情况下可以修改。 Linux chattr命令适用的Linux版本 chattr命令在大…

攀拓(PAT)2024年春季 甲级题解

A-1 Braille Recognition 两层循环遍历&#xff0c;用数组计数 #include <bits/stdc.h> using namespace std; int a[10]; int main() {int n,m;cin>>n>>m;string s[110];for(int i0;i<n;i)cin>>s[i];for(int i0;i<n-2;i) {for(int j0;j<m-…

小迪安全39WEB 攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用

#知识点&#xff1a; 逻辑漏洞 1、CSRF-原理&危害&探针&利用等 2、SSRF-原理&危害&探针&利用等 3、CSRF&SSRF-黑盒下漏洞探针点 #详细点&#xff1a; CSRF 全称&#xff1a;Cross-site request forgery&#xff0c;即&#xff0c;跨站请求…

ThingsBoard开源物联网平台介绍

1. Thingsboard 简介 ThingsBoard是一个基于Java的开源物联网平台&#xff0c;旨在实现物联网项目的快速开发、管理和扩展。它使用行业标准的物联网协议&#xff08;MQTT、CoAP和HTTP&#xff09;实现设备连接&#xff0c;并支持云和本地部署。ThingsBoard结合了可扩展性、容错…

Springboot+vue的疫情居家办公系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的疫情居家办公系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

上海计算机学会 2023年11月月赛 丙组T5 推箱子(数学 思维 排序)

第五题&#xff1a;T5推箱子 标签&#xff1a;排序、数学、思维题意&#xff1a;给定 t t t组数据&#xff0c;每组数据给定长度为 n n n的字符串&#xff0c; 表示箱子&#xff0c; _ \_ _表示空格&#xff0c;求把箱子都推到一起&#xff08;即两两箱子之间没有空格&#…