当前位置: 首页 > news >正文

IO流框架,缓冲流

一.缓冲流有什么优点

Java中的缓冲流(Buffered Stream)具有以下优势:

  1. 提高效率:缓冲流通过在内存中缓存一部分数据,减少了直接从内存到磁盘或从磁盘到内存的频繁IO操作,从而提高了读写效率。
  2. 缓冲区大小调整:缓冲流可以自动调整缓冲区的大小,以适应不同大小的写入或读取操作。这有助于提高内存的使用效率,并减少因频繁分配和释放内存导致的系统开销。
  3. 自动刷新:当缓冲区满时,缓冲流会自动刷新将数据写入目标位置。这有助于减少程序员需要手动刷新流的次数,降低出错风险。
  4. 错误处理:缓冲流提供了检查写入或读取操作是否发生错误的方法。这使得程序员可以更好地处理流操作中的错误情况。
  5. 自动关闭:Java 7引入的try-with-resources语句可以自动关闭实现了AutoCloseable接口的资源,包括缓冲流。这有助于确保流在使用完毕后被正确关闭,避免资源泄漏问题。

总之,缓冲流通过缓存、自动调整、错误处理和自动关闭等功能,提高了流操作的效率、可靠性和安全性。

二.字节缓冲流

1.原理

原理:字节缓冲输入流自带8kb缓冲池,字节缓冲输出流也自带8kb缓冲池

 2.构造器

public BufferedInputstream(InputStream is)
把低级的字节输入流包装成一个高级的缓冲字节输入流,从而提高读数据的性能


public BufferedOutputStream(OutputStream os
把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能

3.代码

package org.example;import java.io.*;public class day09 {public static void main(String[] args) {try (InputStream is = new FileInputStream("d:/temp/day05/改名.mp4");//定义一个字节缓冲输入流包装原始的字节输入流BufferedInputStream bis = new BufferedInputStream(is);OutputStream os = new FileOutputStream("d:/temp/day05/新名.mp4");//定义一个字节缓冲输出流包装原始的字节输出流BufferedOutputStream bos = new BufferedOutputStream(os)) {byte[] buffer = new byte[1024];int len;while((len = bis.read(buffer)) != -1){bos.write(buffer,0,len);}System.out.println("完成");} catch (Exception e) {e.printStackTrace();}}
}

默认缓冲池8kb,如果需要缓冲池更大,可以更改:

InputStream is = new FileInputStream("d:/temp/day05/改名.mp4");
//定义一个字节缓冲输入流包装原始的字节输入流
BufferedInputStream bis = new BufferedInputStream(is,8192*3);

OutputStream os = new FileOutputStream("d:/temp/day05/新名.mp4");
//定义一个字节缓冲输出流包装原始的字节输出流
BufferedOutputStream bos = new BufferedOutputStream(os,8192*3)

三.字符缓冲流

1.字符缓冲输入流

自带8kb的字符缓冲池,可以提高字符输入流读取字符数据的性能

2.构造器

public BufferedReader(Reader r)
把低级的字符输入流包装成字符缓冲输入流管道,从而提高字符输入流读字符数据的性能

3.方法

public String readLine()
读取一行数据返回,如果没有数据可读了,会返回nul1

4.代码

package org.example;import java.io.*;
import java.lang.invoke.VarHandle;public class day10 {public static void main(String[] args) {try (Reader fr = new FileReader("d:/temp/day05/完美世界.txt");BufferedReader buf = new BufferedReader(fr);) {char[] chars = new char[5];int len;while((len =buf.read(chars))!=-1){System.out.print(new String(chars,0,len));}} catch (Exception e) {e.printStackTrace();}}
}

按行读取

package org.example;import java.io.*;
import java.lang.invoke.VarHandle;public class day10 {public static void main(String[] args) {try (Reader fr = new FileReader("d:/temp/day05/完美世界.txt");BufferedReader buf = new BufferedReader(fr);) {String s;while((s = buf.readLine())!=null){System.out.println(s);}} catch (Exception e) {e.printStackTrace();}}
}

5.字符缓冲输出流

自带8kb的字符缓冲池,可以提高字符输出流写字符数据的性能

6.构造器

public BufferedWriter(Writer r)
把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能

7.代码

package org.example;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.Writer;public class day11 {public static void main(String[] args) {try ( //用多态Writer fw = new FileWriter("d:/temp/day05/test1.txt",true);//创建字符缓冲输出流管道包装原始的字符输出流final BufferedWriter bfw = new BufferedWriter(fw);){bfw.write("大梦谁先醒");bfw.newLine();//换行符bfw.write("我计不成,乃天命也");} catch (Exception e) {e.printStackTrace();}}
}

相关文章:

IO流框架,缓冲流

一.缓冲流有什么优点 Java中的缓冲流(Buffered Stream)具有以下优势: 提高效率:缓冲流通过在内存中缓存一部分数据,减少了直接从内存到磁盘或从磁盘到内存的频繁IO操作,从而提高了读写效率。缓冲区大小调整…...

数字音频工作站软件 Ableton Live 11 mac中文软件特点与功能

Ableton Live 11 mac是一款数字音频工作站软件,用于音乐制作、录音、混音和现场演出。它由Ableton公司开发,是一款极其流行的音乐制作软件之一。 Ableton Live 11 mac软件特点和功能 Comping功能:Live 11增加了Comping功能,允许用…...

【PyQt】调整子控件的层级以调整绘制的先后顺序

简述 qt中貌似没有直接设置z序的函数,但对应的有其他调整z序的方法: QWidget.raise_():置顶 QWidget.lower():置底 QWidget.stackUnder(wid):置于指定控件之下 其中关键函数是QWidget.stackUnder(wid),利…...

js中数组的相关方法

引言: 数组(Array)是有序的元素序列。 [1]若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量 方法: push()…...

深入浅出排序算法之直接插入排序(拓展:折半插入排序)

目录 1. 图示解析 2. 原理解析 3. 代码实现 4. 性能分析 5. 折半插入排序(拓展) 直接插入排序和选择排序的第一趟就是第一个关键字 ! 1. 图示解析 2. 原理解析 整个区间被分为:① 有序区间;② 无序区间 每次选…...

皮卡丘RCE靶场通关攻略

皮卡丘RCE靶场通关攻略 文章目录 皮卡丘RCE靶场通关攻略RCE(remote command/code execute)概述远程系统命令执行启动环境漏洞练习第一关exec "ping"第二关 exec "eval" RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服…...

Mysql binlog日志功能使用,简单易懂

一、简单了解binlog MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select)。因此binlog日志文件我们用cat等查看文件的命令是打不开的,但是mysql提供了专门看binlog文件的命令…...

计算机视觉-光源的目的和作用

光源的目的 机器视觉系统的核心是图像采集和图像处理,而光源则是影响图像水平的重要因素,通过适当的光源照明,使图像中的目标信息与背景信息得到更好的分离,可大大降低图像识别难度,提高系统的精度和可靠性。 对于机器…...

源码角度分析Java 循环中删除数据为什么会报异常

一、源码角度分析Java 循环中删除数据为什么会报异常 相信大家在之前或多或少都知道 Java 中在增强 for中删除数据会抛出:java.util.ConcurrentModificationException 异常,例如:如下所示程序: public class RmTest {public sta…...

leetCode 229. 多数元素 II + 摩尔投票法 + 进阶 + 优化空间

229. 多数元素 II - 力扣(LeetCode) 给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。 (1)哈希表 class …...

5 个编写高效 Makefile 文件的最佳实践

在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动化构建、编译、测试和部署。然而,编写高效的Makefile文件并不是一件容易的事情。在本文中,我们将讨论如何编写高效的Makefile文件,以提高我们的开发…...

20231028刷题记录

P3381 【模板】最小费用最大流 Portal. sol. 注意 SPFA 找最小费用增广路时不要到终点就返回,因为到终点的路径可能有多条不能确定哪条是费用最小的。 P2740 [USACO4.2] 草地排水Drainage Ditches Portal. 最大流模板。 注意区分 N , M N,M N,M。 CF609D G…...

39 深度学习(三):tensorflow.data模块的使用(基础,可跳)

文章目录 data模块的使用基础api的介绍csv文件tfrecord data模块的使用 在训练的过程中,当数据量一大的时候,我们纯读取一个文件,然后每次训练都调用相同的文件,然后进行处理是很不科学的,或者说,当我们需…...

css四种导入方式

1 行内样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <h1 style"color: blue">我是标题</h1> </body> </htm…...

Linux学习第24天:Linux 阻塞和非阻塞 IO 实验(一): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 在正式开始今天的笔记之前谈一下工作中遇见的一个问题。 本篇笔记主要学习Linux 阻塞和非阻塞 IO 实验&#xff0c;主要包括阻塞和非阻塞简介、等待队列、轮询、…...

037-第三代软件开发-系统音量设置

第三代软件开发-系统音量设置 文章目录 第三代软件开发-系统音量设置项目介绍系统音量设置QML 实现C 实现 总结一下 关键字&#xff1a; Qt、 Qml、 volume、 声音、 GPT 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Obj…...

Python 自动化详解(pyautogui)

文章目录 1 概述1.1 第三方库&#xff1a;pyautogui1.2 坐标说明 2 操作对象2.1 鼠标2.1.1 定位2.1.2 移动2.1.3 拖动2.1.4 滚动2.1.5 点击 2.2 键盘2.2.1 输入2.2.2 按键2.2.3 快捷键 2.3 屏幕2.3.1 截图2.3.2 分辨率 2.4 信息提示2.4.1 提示框2.4.2 选择框2.4.3 密码输入2.4.…...

【Linux】第四站:Linux基本指令(三)

文章目录 一、时间相关的指令1.指令简介2.使用 二、cal指令三、find指令 -name1.介绍2.使用 四、grep指令1.介绍2.使用 五、zip/unzip指令1.介绍2.zip的安装3.使用 六、tar指令&#xff1a;打包解包&#xff0c;不打开它、直接看内容1.介绍2.使用 七、bc指令八、uname -r指令1.…...

SpringBoot内置工具类之断言Assert的使用与部分解析

先例举一个service的demo中用来验证参数对象的封装方法&#xff0c;使用了Assert工具类后是不是比普通的 if(xxx) { throw new RuntimeException(msg) } 看上去要简洁多了&#xff1f; 断言Assert工具类简介 断言是一个判断逻辑&#xff0c;用来检查不该发生的情况&#xff…...

如何检测租用的香港服务器是不是CN2线路呢?

CN2&#xff0c;是中国电信新一代融合承载网络&#xff0c;是为电信自身关键业务和具有QoS保证的SLA业务服务的&#xff0c;可以提供高性能的网络指 标&#xff0c;平均单向时延、最大单向时延、单向丢包率等均属于顶尖水平。简单地说&#xff0c;CN2和普通网络&#xff0c;就像…...

Windows和Office激活终极指南:KMS_VL_ALL_AIO智能脚本完整教程

Windows和Office激活终极指南&#xff1a;KMS_VL_ALL_AIO智能脚本完整教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗烦恼吗&#xff1f;Office突然变成只读模式影响…...

MASA模组汉化终极指南:快速实现Minecraft中文界面本地化

MASA模组汉化终极指南&#xff1a;快速实现Minecraft中文界面本地化 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 你是否曾经因为MASA模组的英文界面而感到困扰&#xff1f;面对复杂的…...

ChatGPT提示工程进阶实战(故事化表达失效的7大隐形陷阱)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;故事化表达失效的底层认知重构 当工程师在技术文档中反复使用“用户点击按钮后&#xff0c;系统就像一位耐心的向导&#xff0c;带他走过三步旅程”这类修辞时&#xff0c;信息熵并未降低——反而因隐喻失准而…...

d2dx深度探索:经典游戏《暗黑破坏神2》现代化适配的技术架构与实现原理

d2dx深度探索&#xff1a;经典游戏《暗黑破坏神2》现代化适配的技术架构与实现原理 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2d…...

量子机器学习在水质预测中的实践:QSVC与QNN模型对比分析

1. 项目概述&#xff1a;当量子计算遇见水质监测作为一名长期关注前沿技术落地的从业者&#xff0c;我最近完成了一个将量子机器学习&#xff08;QML&#xff09;应用于水质预测的实践项目。这个项目的核心&#xff0c;是尝试用量子计算的新范式&#xff0c;去解决一个经典的环…...

量子机器学习可解释性:从经典XAI到XQML的挑战与创新方法

1. 项目概述&#xff1a;当量子机器学习遇上“黑盒”挑战作为一名长期关注前沿技术交叉领域的从业者&#xff0c;我最近花了大量时间研究一个既烧脑又极具潜力的方向&#xff1a;如何让量子机器学习&#xff08;QML&#xff09;模型变得“透明”。我们都知道&#xff0c;经典深…...

Wand-Enhancer终极指南:3步免费解锁WeMod Pro高级功能完整教程

Wand-Enhancer终极指南&#xff1a;3步免费解锁WeMod Pro高级功能完整教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为每月支付WeMod Pro订阅…...

5分钟快速掌握ViGEmBus:Windows虚拟游戏控制器驱动完整指南

5分钟快速掌握ViGEmBus&#xff1a;Windows虚拟游戏控制器驱动完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过这样的困扰&#xf…...

因果机器学习:提升时序预测鲁棒性的数据驱动与知识融合实践

1. 项目概述与核心价值在数据中心运维、供应链管理、金融风控这些领域&#xff0c;我们每天都在和数据打交道&#xff0c;核心任务就是预测未来。比如&#xff0c;预测服务器机房的温度会不会过热&#xff0c;或者预测下个月的能源消耗成本。传统机器学习模型&#xff0c;像XGB…...

基于Hugging Face BART模型构建文本摘要服务:从原理到部署实战

1. 项目概述&#xff1a;从零构建一个可用的文本摘要服务文本摘要&#xff0c;这个听起来有点学术的词&#xff0c;其实离我们很近。想想看&#xff0c;每天面对海量的新闻、报告、论文&#xff0c;甚至冗长的会议纪要&#xff0c;谁不想快速抓住核心要点&#xff1f;这就是文本…...