Java输出流之BufferWriter类

news2024/11/25 4:36:47

在这里插入图片描述

  咦咦咦,各位小可爱,我是你们的好伙伴——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.coloradmin.cn/o/1512158.html

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

相关文章

<AI大模型学习>——《人工智能AI》

<AI大模型学习>——《人工智能AI》 一、AI大模型通识 1.AI介绍 人工智能(Artificial Intelligence),英文缩写为AI。 是新一轮科技革命和产业变革的重要驱动力量, 是研究、开发用于模拟、延伸和扩展人的智…

【滤波专题-第8篇】ICA降噪方法——类EMD联合ICA降噪及MATLAB代码实现(以VMD-ICA为例)

今天来介绍一种效果颇为不错的降噪方法。(针对高频白噪声) 上一篇文章我们讲到了FastICA方法。在现实世界的许多情况下,噪声往往接近高斯分布,而有用的信号(如语音、图像特征等)往往表现出非高斯的特性。F…

【大厂面试演练】知道ZooKeeper有什么应用场景吗

面试官:咳咳咳,看你简历写了精通ZooKeeper,那我就随便考考你吧 面试官:不用慌尽管说,错了也没关系😊。。。 每日分享大厂面试演练,感兴趣就关注我吧❤️ 面试官:知道ZooKeeper有什么…

Docker安装步骤笔记

一、环境准备 VM网络配置 打开VMware软件 --编辑 --虚拟网络编辑器 二、VM创建虚拟机 三、安装rhel8.9操作系统 1、rhel8.9 镜像下载 第一步:进入redhat官网进行注册第二步:下载rhel8.9镜像文件 https://access.redhat.com/downloads/content/rhel …

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…

JDBC连接Mysql(executeQuely)3/13

resultset-->executeQuery import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;public class Demo3 {public static void main(String[] args) throws Exception {//1.注册驱动Class.forName("com.mys…

【Java,Redis】Redis 数据库存取字符串数据以及类数据

1、 字符串存取数据 Resource private StringRedisTemplate stringRedisTemplate;//从Redis中获取string字符串 stringRedisTemplate.opsForValue().get("cache:shop:"id); //Json -> class Shop shop JSONUtil.toBean(ShopJson,Shop.class); //字符串写入redis…

C# Stopwatch计算代码运行时间

文章目录 前言一、计算范围时间1、起始位置2、结束位置3、获取时间封装成对象(1)、完整代码(2)、使用示例 二、计算检查点时间1、初始化2、检查点封装成对象(1)、完整代码(2)、使用示…

SQL Server错误:15404

执行维护计划失败,提示SQL Server Error 15404 无法获取有关... 异常如下图: 原因:数据库用户名与计算机名称不一致 解决办法:1.重名称数据库用户名 将前缀改成计算机名 2.重启SQL Server代理

C++Qt学习——不用UI文件编程

在创建文件的时候不要选中Generate form这块 创建的文件如下图所示,比起之前的没有了form这一快 1、在mainwindow.h里面声明按钮对象 2、在mainwindow.cpp里实例化按钮 2.1、方法一 pushButton new QPushButton();pushButton->show(); 但是发现显示是分离的 2…

保研复习数据结构记(8)--排序

一.内部排序 1.概念 什么是排序?是将一个任意排列的记录或者是数据元素,排列成按关键字有序的序列什么是排序方法是稳定的?按照关键字排序的kikj,在排序之后,两个关键字相等的记录的顺序与排序之前相同,若…

ubuntu2004桌面系统英伟达显卡驱动安装方法

#如何查看显卡型号 lspci | grep -i vga#----output------ 01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f06 (rev a1)根据 Device 后的 值 进入网站查询 pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci #根据显卡型号,下载对应系统的驱动…

Linux 硬件时间(RTC time)、系统时间(UTC时间、Universal time)、本地时间(Local time)、时区(Time zone)与夏令时(DST)解析

文章目录 理解时间:硬件时间、系统时间(UTC时间)、本地时间、时区与夏令时1. 硬件时间(RTC time)1.1 硬件时间简介1.2 如何使用硬件时间 2. 系统时间(UTC时间)(Universal time&#…

TSINGSEE青犀煤矿矿井视频监控与汇聚融合管理视频监管平台建设方案

一、背景需求 随着我国经济的飞速发展,煤炭作为我国的主要能源之一,其开采和利用的重要性不言而喻。然而,煤矿事故频发,不仅造成了巨大的人员伤亡和财产损失,也对社会产生了深远的负面影响。视频监控系统作为实现煤矿智…

普发Pfeiffer OmniStar/ThermoStar GSD300/GSS300内部电路图装配安装3D图原理图电路板电路图详情内容看图片目录

普发Pfeiffer OmniStar/ThermoStar GSD300/GSS300内部电路图装配安装3D图原理图电路板电路图详情内容看图片目录

【考研】高等数学总结

文章目录 第一章 极限 函数 连续1.1 极限存在准则及两个重要极限1.1.1 夹逼定理1.1.1.1 数列夹逼定理1.1.1.2函数夹逼定理 1.1.2 两个重要极限1.1.2.1 极限公式11.1.2.1.1 证明1.1.2.1.2 数列的单调有界收敛准则1.1.2.1.2.1 二项式定理1.1.2.1.2.2 证明 1.1.2.2 极限公式21.1.2…

在Linux/Ubuntu/Debian中设置字体

下载字体。 下载你喜欢的字体,双击并安装。 之后更新字体缓存: fc-cache -f -v安装 GNOME 调整。 GNOME Tweaks 是一个工具,允许你自定义 GNOME 桌面环境的各个方面,包括字体。 如果你还没有安装 GNOME Tweaks: …

pytorch之诗词生成--2

先上代码: # -*- coding: utf-8 -*- # File : dataset.py # Author : AaronJny # Time : 2019/12/30 # Desc : 构建数据集 from collections import Counter import math import numpy as np import tensorflow as tf import settingsclass Tokenizer:""&…

MIT 6.S081---Lab: locks

Memory allocator (moderate) 修改kernel/kalloc.c,修改kmem声明并定义结构体数组: 修改kernel/kalloc.c中的kinit函数,对kmemList进行初始化: 修改kernel/kalloc.c中的kfree函数,获取当前的cpuid并将释放的内存添加到…

互联网架构与通信机制:从边缘到核心的深度解析

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…