IO流笔记

Java中的IO操作大体能分成两种:输出流和输入流,根据使用的流的方式,又可分为字符流和字节流。

1.读数据流

Reader和InputStream,它们都是抽象类,必须由其子类实例化。

实例化:FileReader和FileInputStream,其构造方法中传入路径参数。

方法:

read();每次读取一个字节/字符

read(char []/byte []);每次读取一群字节/字符,需要提供一个“桶”来装数据

2.写数据流

 Writer和OutStream

实例化:FileWriter和FileOutStream

 方法:

write():写入,写入的数据可以是一个/一群字符/字节

3. 缓冲流包装

使用缓冲流包装可以显著提高读写速度。

原因:在Java中,进行文件IO操作需要jvm通过系统调用实现内存中程序的数据与磁盘的交互。在这个过程中系统调用的次数越多耗时越大。缓冲流通过在内存中提供一个8KB的缓冲区实现降低系统调用的次数从而提升IO的速度。

方法:

Reader reader = new FileReader("");
BufferedReader bufferedReader = new BufferedReader(reader);InputStream inputStream = new FileInputStream("");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);Writer fileWriter = new FileWriter("");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);FileOutputStream fileOutputStream = new FileOutputStream("");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream)

4.性能

通过实践,发现当提供的“桶”容量越大,IO速度越快,但最终会趋于一个理想恒定值(再加大容量也不会显著提升),基于这一点,一个一个的字节/字符进行IO操作其效率非常慢故被抛弃,所以常使用缓冲流包装+较大的“桶”容量来实现IO操作。

原因:减少系统调用

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

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

相关文章

【C语言零基础入门篇 - 7】:拆解函数的奥秘:定义、声明、变量,传递须知,嵌套玩转,递归惊艳

文章目录 函数函数的定义与声明局部变量和全局变量、静态变量静态变量和动态变量函数的值传递函数参数的地址传值 函数的嵌套使用函数的递归调用 函数 函数的定义与声明 函数的概念:函数是C语言项目的基本组成单位。实现一个功能可以封装一个函数来实现。定义函数的…

DPDK 简易应用开发之路 3:实现ping(ARP ICMP 协议)

本机环境为 Ubuntu20.04 ,dpdk-stable-20.11.10 网卡IP为192.168.131.153 mac地址 00 0c 29 00 04 4d 理论基础 机器A内部没有机器B的物理地址,则 A ping B 的时候需要先发 arp 请求,以获取机器 B 的 MAC 地址。 获取 MAC 地址 如果 A 和 …

python画图1

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] ["SimHei"]# 模拟数据 years [2016, 2017, 2018, 2019, 2020, 2021, 2022] market_size [7950, 8931, 9940, 11205, 12305, 13199, 14980] my_color #3e9df5plt.plot(years, market_s…

ER论文阅读-Decoupled Multimodal Distilling for Emotion Recognition

基本介绍:CVPR, 2023, CCF-A 原文链接:https://openaccess.thecvf.com/content/CVPR2023/papers/Li_Decoupled_Multimodal_Distilling_for_Emotion_Recognition_CVPR_2023_paper.pdf Abstract 多模态情感识别(MER)旨在通过语言、…

spring-boot-maven-plugin插件打包和java -jar命令执行原理

文章目录 1. Maven生命周期2. jar包结构2.1 不可执jar包结构2.2 可执行jar包结构 3. spring-boot-maven-plugin插件打包4. 执行jar原理 1. Maven生命周期 Maven的生命周期有三种: clean:清除项目构建数据,较为简单,不深入探讨&a…

面试速通宝典——1

1. 内存有哪几种类型? ‌‌‌‌  内存分为五个区,堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量&#…

Gitlab学习(008 gitlab开发工作流GitFlow)

尚硅谷2024最新Git企业实战教程,全方位学习git与gitlab 总时长 5:42:00 共40P 此文章包含第27p-第p29的内容 文章目录 工作流分类集中式工作流功能开发工作流GitFlow工作流Forking工作流 各个分支的功能模拟工作环境创建分支登录领导(项目管理者&#…

idea插件开发的第五天-今天不写工具

介绍 今天介绍一款插件,可以帮你调用spring容器里面的方法,并且可以执行脚本 Demo说明 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8本文在Tools插件之上进行开发本次demo将使用idea的一些组件优化 Tools插件说明 Tools插件是一个Idea插件,此插件提供统一Spi规范…

理解AAC和Opus的编码与解码流程

理解AAC和Opus的编码与解码流程及其在Android中的实现,对于音频开发非常重要。下面,我将详细解释这两种编码格式的原理、流程,并结合具体代码示例,帮助你在Android项目中合理地设计和使用它们。 一、AAC(Advanced Audio Coding) 1. AAC的原理与流程 AAC是一种有损音频压…

Linux实用命令 lsof命令

1.命令简介 lsof(list open files)用于查看进程打开的文件,是十分方便的系统监测工具。因为 lsof 命令需要访问核心内存和各种系统文件,所以需要root权限才可执行。 在 Linux 中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件,所以lsof不仅可…

Linux自主学习篇

用户及权限管理 sudo 是 "superuser do" 的缩写,是一个在类 Unix 操作系统(如 Linux 和 macOS)中使用的命令。它允许普通用户以超级用户(root 用户)的身份执行命令,从而获得更高的权限。 useradd…

学生管理系统1.0版本

学生管理系统1.0版本有5个功能,即添加学生、删除学生、修改学生、查看全部学生、退出系统。 里面对添加重复学号、删除和修改不存在的学号等问题都有相应的解决办法。 代码区: Student.java package student;//快捷键Altinsert public class Student …

基于STM32设计的烘干车间远程控制系统(腾讯云IOT)(228)

文章目录 一、前言1.1 项目介绍【1】项目背景【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】项目背景【5】摘要1.4 开发工具的选择【1】设备端开发【2】上…

微信小程序加载H5页面及与H5页面通信的实战教程

在微信小程序的开发过程中,我们有时需要在小程序中嵌入H5页面。本文将详细介绍如何在微信小程序中通过webview加载H5页面,并实现小程序与H5页面的通信。 一、准备工作 搭建微信小程序开发环境,具体步骤请参考官方文档:https://d…

【中国留学网-注册_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

来!一起探索 2024 年数据和 AI 的奇妙世界

来!一起探索 2024 年数据和 AI 的奇妙世界 前言2024 年数据和 AI 的奇妙世界 前言 生成式 AI 的问世,让世界正在经历一场前所未有的变革,就像是一把神奇的钥匙,正在开启一扇通往无限可能的大门。数据和 AI 的融合,将为…

【更新日志】拉克丝大战亚索-2024.09.23

2024.9.23更新 本次主要是修复了大量bug,改善了画面表现,减少了不必要的杂乱的音效,在此感谢bobo的美术支持。 战斗 战斗视角相机切换为第三人称。新增技能指示器。亚索的 Boss AI 行为,增加一个半血狂暴机制,亚索新…

Neo4j 简单使用

在 Neo4j 项目中,搭建和使用主要包括以下几个步骤: 1. 安装 Neo4j 首先,安装 Neo4j 可以选择多种方式,包括: 本地安装:在 Windows、macOS 或 Linux 系统中,通过官网下载对应的 Neo4j 安装包。…

微服务注册中⼼1

1. 微服务的注册中⼼ 注册中⼼可以说是微服务架构中的”通讯录“ ,它记录了服务和服务地址的映射关系。在分布式架构中, 服务会注册到这⾥,当服务需要调⽤其它服务时,就这⾥找到服务的地址,进⾏调⽤。 1.1 注册中⼼的…

算法之逻辑斯蒂回归(Logistic regression)

简介:个人学习分享,如有错误,欢迎批评指正。 逻辑斯蒂回归(Logistic Regression)是统计学中一种广泛应用于二分类问题的算法。它的主要目标是预测二分类问题中的事件发生的概率。尽管名字里有“回归”,但逻…