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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

macOS 12 Monterey v12.7.1正式版:开启全新的操作系统体验

macOS 12 Monterey已经向所有兼容的Mac设备推出,为您带来了一系列强大的新功能和改进。这个全新的操作系统版本,不仅带来了更流畅的用户体验,还增强了与iOS设备的无缝集成,让您的设备使用更加高效,更加便捷。 macOS 1…

RabbitMQ生产者的可靠性

目录 MQ使用时会出现的问题 生产者的可靠性 1、生产者重连 2、生产者确认 3、数据持久化 交换机持久化 队列持久化 消息持久化 LazyQueue懒加载 MQ使用时会出现的问题 发送消息时丢失: 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生…

Vue 3.3.6 ,得益于WeakMap,比之前更快了

追忆往昔,穿越前朝,CSS也是当年前端三剑客之一,风光的很,随着前端跳跃式的变革,CSS在现代前端开发中似乎有点默默无闻起来。 不得不说当看到UnoCss之前,我甚至都还没听过原子化CSS[1]这个概念(…

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现ARIMA-LSTM差分自回归移动模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Matlab实现ARIMA-LSTM差…

springboot配置https

SSL : secure socket layer 是一种加密协议,SSL主要用于保护数据在 客户端和服务器之间的传输,,防止未经授权的访问和窃取敏感信息 在腾讯云申请ssl证书 申请了之后在我的域名中,,解析 解析了之后&…

Jmeter的接口自动化测试

在去年实施了一年的三端(PC、无线M站、无线APP【Android、IOS】)后,今年7月份开始,我们开始进行接口自动化的实施,目前已完成了整个框架的搭建以及接口的持续测试集成。今天做个简单的分享。 在开始自动化投入前&#…

虚拟化 vs. 裸金属:K8s 部署环境架构与特性对比

伴随着 IT 云化转型的逐步推进,越来越多的用户加入应用容器化改造的行列,并使用 Kubernetes(K8s)进行容器部署管理。然而,令不少用户感到困惑的是,由于大部分应用此前都部署在虚拟化或超融合环境&#xff0…

轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/MultiMaterialPass.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 …

Mac电脑窗口管理Magnet中文 for mac

Magnet是一款Mac窗口管理工具,它可以帮助用户轻松管理打开的窗口,提高多任务处理效率。以下是Magnet的一些主要特点和功能: 分屏模式支持:Magnet支持多种分屏模式,包括左/右/顶部/底部 1/2 分屏、左/中/右 1/3 分屏、…

基于51单片机的温度测量报警系统的设计与制作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、实习目的二、实习任务2.1 设计温度测量报警系统硬件电路2.2 温度测量报警系统软件编程、仿真与调试;2.3 完成温度测量报警系统的实物制作与调试…

基于定容积法标准容器容积标定中的电动针阀自动化解决方案

摘要:在目前的六氟化硫气体精密计量中普遍采用重量法和定容法两种技术,本文分析了重量法中存在的问题以及定容法的优势,同时也指出定容法在实际应用中还存在自动化水平较低的问题。为了提高定容法精密计量过程中的自动化水平,本文…

从工厂到社会:探索如何应用设计模式工厂模式

文章目录 🌟 将设计模式工厂模式运用到社会当中🍊 工厂模式在社会中的应用🎉 工厂🎉 餐厅🎉 运输 🍊 工厂模式的优势🎉 代码简洁🎉 扩展性强🎉 便于维护和管理 &#x1f…

信钰证券:华为汽车概念股持续活跃 圣龙股份斩获12连板

近期,华为轿车概念股在A股商场遭到热捧,多只股票迭创前史新高。10月23日,华为轿车概念股再度走强,到收盘,板块内圣龙股份、银宝山新涨停,轿车ETF在重仓股提振下盘中一度上涨近2%。业界人士认为,…

Day13力扣打卡

打卡记录 奖励最顶尖的 k 名学生(哈希表排序) 用哈希表对所有的positive与negative词条进行映射,然后遍历求解。tip:常用的分割字符串的操作:1.stringstream配合getline() [格式buf, string, char]2.string.find()[find未找到目标会返回npos…

javaEE -9(7000字详解TCP/IP协议)

一: IP 地址 IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物…

AOP 笔记

AOP【面向切面编程】 作用:在不惊动原始设计的基础上进行功能增强。 无侵入式编程 连接点:程序执行的任意位置,SpringAOP中,理解为方法的执行。 切入点:匹配连接点的式子,要追加功能的方法 通知(写在通…

服务运营 |论文解读: 住院病人“溢出”:一种近似动态规划方法

摘要 在住院床位管理中,医院通常会将住院病人分配到相对应的专科病房,但随着病人的入院和出院,可能会出现病人所需的专科病房满员,而其他病房却有空余床位的情况。于是就有了 "溢出 "策略,即当病人等候时间…

【目标检测】Visdrone数据集和CARPK数据集预处理

之前的博文【目标检测】YOLOv5跑通VisDrone数据集对Visdrone数据集简介过,这里不作复述,本文主要对Visdrone数据集和CARPK数据集进行目标提取和过滤。 需求描述 本文需要将Visdrone数据集中有关车和人的数据集进行提取和合并,车标记为类别0&…

记录--vue3实现excel文件预览和打印

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在前端开发中,有时候一些业务场景中,我们有需求要去实现excel的预览和打印功能,本文在vue3中如何实现Excel文件的预览和打印。 预览excel 关于实现excel文档在…

M1本地部署Stable Diffusion

下载安装 参考博客: 在Mac上部署Stable Diffusion(超详细,AI 绘画入门保姆级教程) 安装需要的依赖库 brew install cmake protobuf rust python3.10 git wget 可能中途会存在下载报错或者下载卡主的问题,需要切国内源 brew进行替换源: …