【JAVA入门】Day41 - 字节缓冲流和字符缓冲流
【JAVA入门】Day41 - 字节缓冲流和字符缓冲流
文章目录
- 【JAVA入门】Day41 - 字节缓冲流和字符缓冲流
- 一、缓冲流的体系结构
- 二、字节缓冲流
- 2.1 字节缓冲流提高效率的底层原理
- 三、字符缓冲流
在IO流体系中,FileInputStream,FileOutputStream,FileReader,FileWriter 其实都只是基本流,Java 中还有一些针对他们做出优化的高级流。

一、缓冲流的体系结构

针对字节和字符,Java 分别发明了它们各自的缓冲流。缓冲流一共有四种,Buffered 代表缓冲区,它可以使得读写数据时非常高效。
二、字节缓冲流
字节缓冲流底层自带了一次可以读写 8192 长度的缓冲区。它的构造方法是将基本流通过一个方法进行包装,加入缓冲区。

以下演示了如何利用字节缓冲流来拷贝一个文件:
package BufferedStream;import java.io.*;public class BufferedStreamDemo1 {public static void main(String[] args) throws IOException {/*字节缓冲流拷贝文件(一次读写一个字节)*///1.创建缓冲流对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a_Copied.txt"));//2.循环读取并写入目的地int b;while((b = bis.read()) != -1){bos.write(b);}//3.释放资源bos.close();bis.close();}
}
package BufferedStream;import java.io.*;public class BufferedStreamDemo2 {public static void main(String[] args) throws IOException {/*字节缓冲流拷贝文件(一次读写一个字节数组)*///1.创建缓冲流对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a_Copied.txt"));//2.字节数组byte[] bytes = new byte[1024 * 1024 * 5];int len;while((len = bis.read(bytes)) != -1){bos.write(bytes,0,len);}//3.关闭流bos.close();bis.close();}
}
2.1 字节缓冲流提高效率的底层原理
字节缓冲流读写数据的内存结构如下图所示:

可以看到,读写数据时,字节数据是在内存中的缓冲区进行倒手的,而内存的读写数据是非常非常快的,它的读写速度快到这个倒手的过程可以忽略不计,大大节省了数据与硬盘之间的交互时间。
三、字符缓冲流
字符流本身就具有缓冲区,速度已经很快,而字符缓冲流进一步加快了读写速度。

其构造方法如下:

特别的是,字符缓冲流中还有两个非常有用的特有方法:

readLine() 方法让我们可以一行一行读取数据,newLine() 方法是一个跨平台的换行方法,使用它可以保证在 Windows、Linux、Mac 所有操作系统下的换行都能生效且不会出错。
① 字符缓冲输入流的用法:
package BufferedStream;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class BufferedStreamDemo3 {public static void main(String[] args) throws IOException {/*字符缓冲输入流*///1.创建字符缓冲输入流对象BufferedReader br = new BufferedReader(new FileReader("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a.txt"));//2.一行一行读String line;while((line = br.readLine()) != null) {System.out.println(line);}//3.释放资源br.close();}
}
② 字符缓冲输出流的用法:
package BufferedStream;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class BufferedStreamDemo5 {public static void main(String[] args) throws IOException {/*字符缓冲输出流*///1.创建BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\b.txt"));//2.写出数据bw.write("你嘴角上扬的样子,百度搜索不到");bw.newLine(); //跨平台换行bw.write("以后如果我结婚了,你一定要来哦,没有新娘我会很尴尬");bw.newLine();//3.释放资源bw.close();}
}
相关文章:
【JAVA入门】Day41 - 字节缓冲流和字符缓冲流
【JAVA入门】Day41 - 字节缓冲流和字符缓冲流 文章目录 【JAVA入门】Day41 - 字节缓冲流和字符缓冲流一、缓冲流的体系结构二、字节缓冲流2.1 字节缓冲流提高效率的底层原理 三、字符缓冲流 在IO流体系中,FileInputStream,FileOutputStream,F…...
collocate join,bucket join,broadcast join,shuffle join对比分析
在分布式计算和大数据处理中,尤其是在使用像 Apache Spark、Hive 等大数据处理框架时,Join 操作是非常常见的。根据数据分布方式和执行机制,Join 操作可以分为不同的类型,如 Collocate Join、Bucket Join、Broadcast Join 和 Shuffle Join。以下是它们的详细对比分析: 1.…...
微信自动通过好友和自动拉人进群,微加机器人这个功能太好用了
又发现一个好用的功能,之前就想找一个这种工具,现在发现可以利用微加机器人的两个功能来实现,分别是加好友和关键词拉群 首先 微加机器人的专业版 > 功能 > 加好友设置 可以设置一个关键词通过,这样别人加好友的时候只需要输入制定内…...
R语言统计分析——功效分析3(相关、线性模型)
参考资料:R语言实战【第2版】 1、相关性 pwr.r.test()函数可以对相关性分析进行功效分析。格式如下: pwr.r.test(n, r, sig.level, power, alternative) 其中,n是观测数目,r是效应值(通过线性相关系数衡量࿰…...
Django创建模型
1、根据创建好应用模块 python manage.py startapp tests 2、在models文件里创建模型 from django.db import modelsfrom book.models import User# Create your models here. class Tests(models.Model):STATUS_CHOICES ((0, 启用),(1, 停用),# 更多状态...)add_time mode…...
盘点2024年大家都在用的短视频剪辑工具
你现在休息的时间是不是都靠短视频来消遣?看着看着你就会发现短视频制作好像我也可以了吧?这次我就介绍一些简单好操作的短视频剪辑工具。 1.FOXIT视频剪辑 连接直达>>https://www.pdf365.cn/foxitclip/ 短视频剪辑其实也不难,只需…...
“左侧文字横向”的QTabWidget
左侧用 QToolButton 组, 右侧用 QStackedWidget,信号槽绑定切换页面 可定制化高 QButtonGroup* btnGp new QButtonGroup(this);btnGp->addButton(ui->btn1, 0);btnGp->addButton(ui->btn2, 1);btnGp->addButton(ui->btn3, 2);connect…...
python学习之字符串操作
str python # 定义一个字符串变量 print(id(str))print(str) # 打印整个字符串 print(str[0:-1]) # 打印字符串第一个到倒数第二个字符(不包含倒数第一个字符) print(str[0]) # 打印字符串的第一个字符 print(str[2:5]) # 打印字符串第三到第…...
第7篇:【系统分析师】计算机网络
考点汇总 考点详情 1网络模型和协议:OSI/RM七层模型,网络标准和协议,TCP/IP协议族,端口 七层:应用层,表示层,会话层,传输层,网络层,数据链路层,…...
无人机培训机构组装调试技术详解
一、基础知识学习 在进入无人机组装调试领域之前,扎实的基础知识是不可或缺的。学员需掌握以下内容: 1. 无人机基本原理:了解无人机的飞行原理,包括升力、推力、重力和阻力等基本物理概念,以及无人机的飞行控制系统&…...
汽车的舒适进入功能是什么意思?
移动管家汽车的舒适进入系统是指无钥匙进入功能,它允许驾驶者在距离车辆一定范围内自动感应解锁车辆,并具备无钥匙启动功能。舒适进入系统的核心优势包括: 智能化操作:无需传统钥匙,通过智能感应实现车门解锁和…...
杂七杂八-系统环境安装
杂七杂八-系统&环境安装 1. 系统安装2. 环境安装 仅个人笔记使用,后续会根据自己遇到问题记录,感谢点赞关注 1. 系统安装 Windows安装linux子系统WSL2:使用windows系统跑linux程序(大模型)WSL VSCode:VSCode连接WSL实现高效…...
Redis高可用,Redis性能管理
文章目录 一,Redis高可用,Redis性能管理二,Redis持久化1.RDB持久化1.1触发条件(1)手动触发(2)自动触发 1.2 Redis 的 RDB 持久化配置1.3 RDB执行流程(1) 判断是否有其他持久化操作在执行(2) 父进…...
React项目中使用发布订阅模式
React项目中使用发布订阅模式 1.创建发布订阅器2.在组件中使用发布订阅器3. 订阅数据 发布订阅模式(也称观察者模式)是一种管理跨组件通信的有效方式,尤其是在不希望直接依赖于特定组件的情况下。这种模式允许一个对象(发布者&…...
buck boost Ldo 经典模型的默写
BUCK: BOOST: LDO: BUCK-BOOST:...
velero v1.14.1迁移kubernetes集群
1 概述 velero是vmware开源的一个备份和恢复工具,可作用于kubernetes集群下的任意对象和应用数据(PV上的数据)。github地址是https://github.com/vmware-tanzu/velero。 对于应用数据,可分文件级别的复制和块级别的复制。文件级…...
Qt Model/View之Model
在检查如何处理选择之前,您可能会发现检查模型/视图框架中使用的概念很有用。 基本概念 在模型/视图架构中,模型提供了一个标准接口,用于视图和委托访问数据。在Qt中,标准接口由QAbstractItemModel类定义。无论数据项如何存储在…...
如何在 Vue 3 中使用 Element Plus
在 Vue 3 中使用 Element Plus 是一个相对直接的过程,因为 Element Plus 是为 Vue 3 设计的 UI 组件库。以下是在 Vue 3 项目中集成和使用 Element Plus 的基本步骤: 1. 安装 Element Plus 首先,你需要在你的 Vue 3 项目中安装 Element Plu…...
【TVM 教程】在 Relay 中使用 Pipeline Executor
Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 → Apache TVM 中文站tvm.hyper.ai/ 作者:Hua Jiang 本教程介绍如何将「Pipeline Executor」与 Relay 配合使用。 import tvm from t…...
使用mingw64 编译 QT开发流程
1. 安装QT5 QT5.12.12 安装时选择mingw的开发包 2. 使用qtdesigner 进行ui设计 生成ui文件 3. 将ui文件转换为.h 文件 uic mywindow.ui -o ui_mywindow.h代码中指向生成的 UI 对象的地方 要改成这个Form 4. 编译 创建mainwindow.cpp #include "mainwindow.h"…...
手把手教你用Cloudflare免费RPC节点开发以太坊应用
从零构建以太坊DApp:Cloudflare免费RPC节点实战指南 当你在深夜调试智能合约时,是否曾被突然失效的RPC节点打断思路?作为以太坊开发者,稳定可靠的节点连接是开发流程中最基础却最容易被忽视的一环。Cloudflare提供的免费以太坊RPC…...
OpCore-Simplify:黑苹果配置的终极简化方案——从复杂到简单的革命性转变
OpCore-Simplify:黑苹果配置的终极简化方案——从复杂到简单的革命性转变 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经因为黑…...
Ubuntu 18.04 + CUDA 11.3 下,手把手教你搞定 MinkowskiEngine 的编译安装(附避坑指南)
Ubuntu 18.04 CUDA 11.3 环境下的 MinkowskiEngine 编译实战指南 在3D点云处理和稀疏卷积领域,MinkowskiEngine 凭借其高效的稀疏张量计算能力已成为研究者的重要工具。然而,其复杂的依赖关系和编译过程常常让开发者望而却步。本文将基于 Ubuntu 18.04…...
忍者像素绘卷入门必看:Z-Image-Turbo模型结构精简与推理速度提升原理
忍者像素绘卷入门必看:Z-Image-Turbo模型结构精简与推理速度提升原理 1. 项目概述 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,专为16-Bit复古游戏美学风格设计。它采用明亮的"云端"视觉设计,为用户提供清爽且…...
GyroFlow:用陀螺仪数据重塑视频稳定技术
GyroFlow:用陀螺仪数据重塑视频稳定技术 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow 在数字影像创作领域,画面稳定性直接决定作品专业度。无论是运动相机拍…...
专业安防怎么选?奥尔特云与普通摄像头核心性能对比
不少人认为安防摄像头只是“能录像、能看见”就够,选型无需太过考究,实则这是安防系统搭建的关键误区。安防系统的核心是精准感知、有效采集,而摄像头作为前端核心采集设备,是所有安防数据的源头。若源头的画面质量、感知能力不达…...
小觅相机‘凉了’之后,我们如何用它的SDK和开源工具链构建自己的SLAM数据集?
从废弃硬件到研究利器:小觅相机SDK与开源工具链的SLAM数据集构建指南 当一款硬件产品的厂商突然消失,官网关闭、技术支持中断,那些被遗弃的设备往往会被贴上"电子垃圾"的标签。但作为一名SLAM研究者或爱好者,你是否想过…...
MULTISIM仿真揭秘:如何设计高可靠性的光耦隔离PMOS驱动电路
1. 光耦隔离PMOS驱动电路的设计挑战 在工业控制和高压隔离场景中,PMOS驱动电路的设计往往面临诸多挑战。我曾在多个项目中遇到过MOS管因静电击穿而损坏的情况,也经历过因开关频率不足导致系统性能下降的尴尬。这些问题归根结底都与MOS管的特性有关。 MOS…...
别再只加Mask了!手把手教你用FlashAttention实现真正的Sliding Window Attention(附代码)
突破传统误区:用FlashAttention实现高效滑动窗口注意力的实战指南 在Transformer模型优化领域,许多开发者对滑动窗口注意力(Sliding Window Attention, SWA)存在一个普遍误解——认为只需在注意力矩阵上添加滑动窗口掩码就能实现线性复杂度。这种错误认…...
【ROS2 基础】ROS2与Colcon核心指令速查手册与避坑指南
为了在 ROS2 的日常开发中提升效率,本文为您整理了一份结构化的核心指令速查清单。去除了冗长的理论,直击实战痛点,并附带了多平台差异、性能优化数据以及常见报错的修复方案。 文章目录[TOC]一、 快速入门:3步跑通基础流程二、 版…...
