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();}}
}

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

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

相关文章

蓝桥杯双周赛算法心得——通关(哈希+小根堆)

大家好,我是晴天学长,这是很重要的贪心思维题,哈希的存法和小根堆的表示很重要。 1) .通关 2) .算法思路 通关 用hash(int[])存点的子节点并按输入顺序存关卡的号码(输入顺序就是) 列如&#…

C++ 函数:在相同类型参数情况下返回不同类型值

首先重载是不能做到的,相同函数参数类型前提下,不可能返回不同类型的返回值,但是想弄一些歪招实现这个效果 模板不算,因为模板会根据不同的输入参数类型生成不同的函数,就不是调用相同的函数了 1、使用 void* 的返回…

RabbitMQ-死信交换机和死信队列

1. 简介 1.1 DLX简介 DLX: Dead-Letter-Exchange 死信交换器,死信邮箱 当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。 如下图所示: 其实死信队列就是一个普通的交换机,有些队列的消息…

初步认识 Web Components 并实现一个按钮

目录 1.Web Components 基本概念 1.1 三个场景 1.2 是什么 2.使用 Custom Elements 实现一个按钮 2.1 概念介绍 2.1.1 Shadow DOM 2.1.2 Element.attachShadow() 2.1.3 在组件中 使用 Shadow DOM 基本步骤 2.1.4 attributeChangedCallback 2.1.5 get observedAttribu…

LeetCode 2558. 从数量最多的堆取走礼物

【LetMeFly】2558.从数量最多的堆取走礼物 力扣题目链接:https://leetcode.cn/problems/take-gifts-from-the-richest-pile/ 给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作: 选择礼物数量最多的那一…

Go 并发编程

文章目录 用 goroutine 和通道实现并发用 sync 实现并发互斥锁sync.Once 结构体同步等待组 zync.WaitGroup竞态检测器 应用自增整数生成器并发消息发送器多路复合计算器用 select 关键字创建多通道监听器多路复合计算器超时处理 用无缓冲通道阻塞主线程用筛法求素数创建随机数生…

Spring Security漏洞防护—HttpFirewall和 HTTPS

一、HttpFirewall Spring Security有几个领域,你所定义的 pattern 会针对传入的请求进行测试,以决定应该如何处理请求。这发生在 FilterChainProxy 决定请求应该通过哪个过滤链时,以及 FilterSecurityInterceptor 决定哪些安全约束适用于请求…

阿里云/腾讯云国际站代理:国际腾讯云的优势

国际腾讯云具有以下优势: 1. 全球覆盖:腾讯云在全球拥有30个区域,覆盖6个大洲,能够提供全球范围的云服务,满足不同地区用户的需求。 2. 大规模网络:腾讯云拥有庞大的全球网络,包括多个高速骨干…

Go 语言操作 MongoDb

文章目录 连接数据库插入数据库插入一条数据批量插入数据 查询数据用 BSON 进行复合查询聚合查询 更新数据删除数据 连接数据库 package mainimport ("context""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options"…

计算机毕设 flink大数据淘宝用户行为数据实时分析与可视化

文章目录 0 前言1、环境准备1.1 flink 下载相关 jar 包1.2 生成 kafka 数据1.3 开发前的三个小 tip 2、flink-sql 客户端编写运行 sql2.1 创建 kafka 数据源表2.2 指标统计:每小时成交量2.2.1 创建 es 结果表, 存放每小时的成交量2.2.2 执行 sql &#x…

Servlet 与Spring对比!

前言: Spring相关的框架知识,算是目前公司在用的前沿知识了,很重要!! 那么以Spring为基础的框架有几个? 以Spring为基础的框架包括若干模块,其中主要的有Spring Framework、Spring Boot、Spring…

十七、模型构建器(ModelBuilder)快速提取城市建成区——批量将夜光数据投影、转为整型(基于参考比较法)

一、前言 本文以参考比较法提取城市建成区为例,详细介绍如何使用模型构建器(ModelBuilder)提高效率,特别说明一下,模型构建器构建的模型是可以保存成为工具,日后需要使用的时候可以直接使用工具不用重复构建,因为模型构建器构建的工作流如果不保存,下次就不能使用,需…

Mybatis基础

文章目录 Mybatis基础XML语言概述使用Mybatis配置Mybatis增删改查复杂查询事务操作动态 SQLifchoose、when、otherwise 缓存机制注解开发 Mybatis基础 虽然我们能够通过JDBC来连接和操作数据库,但是哪怕只是完成一个SQL语句的执行,都需要编写大量的代码…

【Python入门教程】基于OpenCV视频分解成图片+图片组合成视频(视频抽帧组帧)

在人工智能爆火的今天,深度学习被广泛应用于各个领域。深度学习的模型训练离不开大量的样本库。我之前分享过【Python爬虫】批量爬取网页的图片&制作数据集,今天跟大家分享一下如何使用OpenCV库对视频进行抽帧,从而增加样本图片的数量。正…

Operator开发之operator-sdk入门

1 operator-sdk 除了kubebuilder,operator-sdk是另一个常用的用于开发Operator的框架,不过operator-sdk还是基于kubebuilder,因此,通常还是建议使用kubebuilder开发Operator。 2 环境准备 跟kubebuilder类似,需要安…

Tensorflow2 中模型训练标签顺序和预测结果标签顺序不一致问题解决办法

本篇文章将详细介绍Tensorflow2.x中模型训练标签顺序和预测结果标签顺序不一致问题,这个问题如果考虑不周,或者标签顺序没有控制好的情况下会出现预测结果精度极其不准确的情况。 训练数据集的结构:数据集有超过10的类别数,这里包…

【Java 进阶篇】Java HTTP 请求消息详解

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,广泛用于构建互联网应用。在Java中,我们经常需要发送HTTP请求来与远程服务器进行通信。本文将详细介绍Java中HTTP请求消息的各个部分,包括请求行、…

shouldComponentUpdate 是做什么的?

目录 前言 生命周期函数 shouldComponentUpdate 的写法和用法 代码 事件和API 优缺点 方法 总结 理论 结论 shouldComponentUpdate 是 React 类组件中的一个生命周期方法,用于决定一个组件的 props 或 state 发生变化时是否应该重新渲染。默认情况下&…

什么是离岸金融 (OFFSHORE FINANCE)

什么是离岸金融 离岸金融(Offshore Finance)是指在国外或离岸地区开设金融账户、进行金融交易或管理金融资产的金融实践。这通常涉及将资金、投资、银行账户或金融交易放置在国外的特殊地区或国家,以获得各种金融和税收优惠。离岸金融的目的…

设计模式--7个原则

单一职责原则:一个类负责一项职责。 里氏替换原则:继承与派生的规则。 依赖倒置原则:高层模块不应该依赖基层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程&#xff0…