4.3. 缓冲流

news2024/11/19 1:32:26

缓冲流是Java I/O中的一个重要概念,它可以提高文件读写的性能。在本节中,我们将详细讨论缓冲流的概念、使用方法以及实例。

缓冲流有两种类型:缓冲字节流和缓冲字符流。缓冲字节流包括BufferedInputStreamBufferedOutputStream,而缓冲字符流包括BufferedReaderBufferedWriter

4.3.1 为什么使用缓冲流?

当我们从磁盘读取文件或向磁盘写入文件时,磁盘的读写速度远低于内存的读写速度。如果我们一次只读写一个字节或字符,会导致频繁地与磁盘进行数据交换,这样效率会很低。为了提高文件读写性能,我们可以使用缓冲流。缓冲流使用内存缓冲区,可以一次性读取或写入大量数据,从而减少与磁盘的交互次数,提高整体性能。

4.3.2 缓冲字节流

缓冲字节流包括BufferedInputStreamBufferedOutputStream,它们分别继承自InputStreamOutputStream。我们可以把它们包装在其他输入输出流之上,为它们提供缓冲功能。

4.3.2.1 使用BufferedInputStream和BufferedOutputStream

让我们看一个使用BufferedInputStreamBufferedOutputStream进行文件复制的示例:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("input.txt");
            BufferedInputStream bis = new BufferedInputStream(fis);

            FileOutputStream fos = new FileOutputStream("output.txt");
            BufferedOutputStream bos = new BufferedOutputStream(fos);

            int data;
            while ((data = bis.read()) != -1) {
                bos.write(data);
            }

            bis.close();
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们首先创建了一个FileInputStream和一个FileOutputStream,然后使用BufferedInputStreamBufferedOutputStream分别对它们进行了包装。接下来,我们像往常一样执行读写操作。在读写过程中,BufferedInputStreamBufferedOutputStream会自动为我们管理缓冲区。

4.3.3 缓冲字符流

缓冲字符流包括BufferedReaderBufferedWriter,它们分别继承自ReaderWriter。它们的使用方法与缓冲字节流类似。

4.3.3.1 使用BufferedReader和BufferedWriter

让我们看一个使用BufferedReaderBufferedWriter进行文件复制的示例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader("input.txt");
            BufferedReader br = new BufferedReader(fr);

            FileWriter fw = new FileWriter("output.txt");
            BufferedWriter bw = new BufferedWriter(fw);

            int data;
            while ((data = br.read()) != -1) {
                bw.write(data);
            }

            br.close();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们首先创建了一个FileReader和一个FileWriter,然后使用BufferedReaderBufferedWriter分别对它们进行了包装。接下来,我们像往常一样执行读写操作。在读写过程中,BufferedReaderBufferedWriter会自动为我们管理缓冲区。

4.3.4 小结

通过本节的学习,我们了解了缓冲流的概念、作用以及如何使用缓冲字节流和缓冲字符流。缓冲流可以有效地提高文件读写性能,减少磁盘与内存之间的交互次数。在实际开发中,我们通常会使用缓冲流来操作文件,以提高程序的运行效率。

请务必掌握以下重点:

  1. 缓冲流的作用:通过内存缓冲区提高文件读写性能。
  2. 缓冲字节流:BufferedInputStreamBufferedOutputStream,用于处理字节输入输出。
  3. 缓冲字符流:BufferedReaderBufferedWriter,用于处理字符输入输出。
  4. 如何使用缓冲流:将缓冲流包装在其他输入输出流之上,然后像往常一样执行读写操作。缓冲流会自动管理缓冲区。

希望这些示例和解释能帮助您更好地理解和掌握缓冲流的使用。请尝试编写一些实际的代码,加深对缓冲流的理解。 推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file

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

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

相关文章

vue中this.$set的用法

this.$set( target, key, value ) target:要更改的数据源(可以是对象或者数组) key:要更改的具体数据 value :重新赋的值 当我们给对象加了一个属性,在控制台能打印出来,但是却没有更新到视图上时,这个时…

【靶场】双重内网渗透测试场景

文章目录 前言一、开始渗透二、横向移动提交flag总结 前言 使用vulfocus搭建一个内网场景靶场拓扑如下: 入口有两个,一个是think PHP2.x命令执行和5x的命令执行漏洞,后续需要搭建二层隧道进行渗透测试。 一、开始渗透 目标: …

Vue为什么组件销毁后定时器会继续

原因 在 Vue 中,组件销毁后定时器可能会继续运行,这是因为这个框架使用了虚拟 DOM 技术。虚拟 DOM 可以提高渲染效率和性能,但也带来了一些问题。 当我们在 Vue 组件中创建定时器时,实际上是在组件的生命周期方法(例如…

OJ练习第124题——叶值的最小代价生成树

叶值的最小代价生成树 力扣链接:1130. 叶值的最小代价生成树 题目描述 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每个非叶节…

Arcgis for javascript 应用开发相关网站推荐(SDK,github社区等)

一、什么是arcgis for javascript ArcGIS for JavaScript是一种用于构建基于Web的GIS应用程序的开发框架。它允许开发人员使用Esri的地图和地理空间数据来构建具有交互性和可视化效果的应用程序。ArcGIS for JavaScript提供了丰富的API和组件,使开发人员可以将地理…

BLCY-6-5-90、、BLCY-6-25-90比例螺纹插装式溢流阀控制器

BLCY-6-5-90、BLCY-6-8-90、BLCY-6-16-90、BLCY-6-25-90比例螺纹插装式溢流阀是螺纹插装式的先导式溢流阀,可以作中小流量液压系统的压力控制阀,配置比例放大器输出电流,根据输入到线圈电流的大小比例控制系统压力。

【Rust 日报】2023-05-28 一个构建在TCP上的聊天工具

tcp-chat:构建在TCP上的简单快速轻量的聊天工具 tcp-chat通过TCP进行通信,该项目的目的是了解并行性和底层网络通信。 前端工具:Solid、Tauri、Vite 后端工具:Rust、Tokio、Serde GitHub: https://github.com/gatomod/tcp-chat ez…

信号链基础

信号链(SIGNAL CHAIN):一个系统中信号从输入到输出的路径。 从信号的采集,放大,传输,处理一直到对相应功率器件产生执行的一整套信号流程叫信号链。具体来说,信号链是对从信号采集(传…

WebGPU:下一代 Web 图形和计算 API

WebGPU 是一种新兴的 Web 标准,旨在为现代图形和计算应用提供高性能、低功耗的 API。本文将介绍 WebGPU 的背景、特点、用途以及和 WebGL 的对比。 一、背景 随着 Web 技术的不断发展,越来越多的高性能图形和计算应用开始出现在浏览器中。WebGL 是迄今为…

陈丹琦团队提出低内存高效零阶优化器MeZO,单卡A100可训练300亿参数模型

深度学习自然语言处理 原创作者:辰宜 今天下午突然发现了一篇陈丹琦大佬的巨作~ 大家一起来简单瞅瞅。 本文旨在介绍一种用于fine-tuning语言模型(LM)的低内存优化器——MeZO,内存减少多达12倍。使用单个A100 800G GPU&#xff0c…

中文完整版FL Studio21永久免费升级

集合最新FL基础操作、编曲技巧、混音技巧、乐理基础、声乐演奏等各类内容,比如更高端版本才有的必备原厂插件Pitcher和Sakura,还有智能编曲插件ORB,编曲软件FL Studio21版本更新现已发布,在这次更新中优化了很多功能,但…

基于 Amazon API Gateway 的跨账号跨网络的私有 API 集成

一、背景介绍 本文主要讨论的问题是在使用 Amazon API Gateway,通过 Private Integration、Private API 来完成私有网络环境下的跨账号或跨网络的 API 集成。API 管理平台会被设计在单独的账号中(亚马逊云科技提供的是多租户的环境),因为客观上不同业务…

Arm推出新一代高性能CPU内核Cortex-X4以及GPU Immortalis-720 GPU

每年差不多这个时候,智能手机芯片背后的大脑 Arm 都会推出高通、联发科等公司用于下一代SoC的构建模块。在 2023 年 Arm 技术日期间,Arm 推出了一系列涵盖高性能和低功耗用例的新 CPU 内核,以及其第五代 GPU,并提供光线追踪图形支…

chatgpt赋能python:Python中构造方法的介绍与应用

Python中构造方法的介绍与应用 在Python编程语言中,构造方法通常是类中的一个特殊方法,用于在对象创建时初始化其属性。构造方法使用__init__关键字来定义,而且通常会包含self参数,用于引用创建的新对象。在本文中,我…

本地服务器搭建PHP简单Imagewheel云图床

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

HVV的艺术系列 之 打点的艺术

渗透的本质是信息收集, 攻防的体系是知识点的串联。 打点的艺术 01 对靶标的分析 在HVV当中,获取到的靶标存在多种行业。对不同的靶标存在不同的打法,我通常分为两个大方向。其一为机关单位,其二为集团公司等。 其中二者区别对攻击…

【golang】2、http client、代理、爬图

文章目录 一、http client二、反向代理2.1 http2.2 gin 三、爬取并存储 jpg 用 golang 可以很方便的爬图(http 下载图片,存储为 jpg 格式)。 一、http client http client 有如下最佳实践: 尽量用 default http client&#xf…

小米万兆路由器里的 Docker 安装 chatgpt-next-web,打造自己的专属ChatGPT

小米万兆路由器里的 Docker 安装 chatgpt-next-web,打造自己的专属ChatGPT 0. 先体验一下效果1. 准备工作2. 查看Docker Hub镜像信息3. 拉取 ChatGPT-Next-Web 镜像和运行容器4. 感谢99. (Optional)其他 小米2022年12月份发布了万兆路由器,里面可以使用D…

挑战高通!智能座舱升级战

和智能驾驶相比,智能座舱无疑是智能化普及的领跑角色。 高工智能汽车研究院监测数据显示,2022年中国市场(不含进出口)乘用车搭载智能数字座舱(大屏语音车联网OTA)前装标配交付795.05万辆,同比增…

01. docker安装青龙面板 基于阿里云centos7服务器(保姆级图文)

目录 1. 安装docker2. 在终端中安装青龙面板3. 开放端口4. 访问青龙面板总结 欢迎关注 『青龙面板』 专栏,持续更新中 欢迎关注 『青龙面板』 专栏,持续更新中 1. 安装docker 在宝塔面板的软件商店中安装docker 2. 在终端中安装青龙面板 安装命令如下…