IO流(一)

前置知识:字符集

常见字符集

  • ASCII字符集:只有英文、数字、符号等,占1个字节
  • GBK字符集:汉字占2个字节,英文、数字占1个字节
  • UTF-8字符集:汉字占3个字节,英文、数字占1个字节

Unicode字符集(统一码,也叫万国码)
Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。

UTF-32:四个字节存储 不被采纳,太占内存,通信效率低。

UTF-8: 

注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。
注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。

字符集的编码、解码操作

编码:把字符按照指定字符集编码成字节。
解码:把字节按照指定字符集解码成字符。

IO流

概述

I指Input,称为输入流:负责把数据读到内存中去

0指Output,称为输出流:负责写数据出去

IO流的应用场景

怎么学IO流

1、先搞清楚I0流的分类、体系
2、再挨个学习每个I0流的作用、用法。

IO流的分类

总结流的四大类:
字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流
字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流
字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。
字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流,

抽象类不能创建对象,不能直接使用他们,需要找他们的实现类来使用。 

IO流 - 字节流

Filelnputstream(文件字节输入流):就是从文件中读取字节到内存中去。

文件字节输入流:每次读取一个字节

 

读取文件的字节数据的时候,犹豫文件是在内存里面的,因此是需要去硬盘里面找文件的数据读取的,但是程序是在内存中执行的,是不能够直接找硬盘中的文件的,每次读取文件的字节时,程序实际上是通过调用系统相关的硬件资源去读取硬盘里的文件数据的;而程序调用系统的硬件资源的开销以及去硬盘中找数据的性能相对内存来说是很慢的,因此在开发中有这样一个规矩:尽量减少程序调用系统的硬件资源读取这个数据的频次。

注意事项:

使用Filelnputstream每次读取一个字节,读取性能较差,并且读取汉字输出会乱码。

文件字节输入流:每次读取多个字节 

buffer可以当作一个桶,性能得到了明显的提升,但是这种方案也不能避免读取汉字输出乱码的问题。但是这种方案适合做文件拷贝操作(会结合文件字节输出流来实现)。

文件字节输入流:一次读取完全部字节

1、使用字节流读取中文,如何保证输出不乱码,怎么解决?
定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。

 

直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?

  • 如果文件过大,创建的字节数组也会过大,可能引起内存溢出

读写文本内容更适合用字符流
字节流适合做数据的转移,如:文件复制等

文件字节输出流:写字节出去

FileOutputStream(文件字节输出流):写字节数据到文件里去。


案例:文件复制 

释放资源的方式

try-catch-finally

  • finally代码区的特点:无论try中的程序是正常执行了,还是出现了异常,最后都一定会执行finally区,除非JVM终止。
  • 作用:一般用于在程序执行完成后进行资源的释放操作(专业级做法)。

try-with-resource

因为finally这种方法比较臃肿

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

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

相关文章

【Redis】Redis常用命令之Hash

1.hset:设置hash中指定的字段(field)的值(value)。 HSET key field value [field value ...]时间复杂度:插⼊⼀组field为O(1),插⼊N组field为O(N)。 返回值:添加的字段的个数。 2.hget&#xf…

Linux学习笔记(一)Linux基本指令

文章目录 前言目录常见命令1. pwd 打印当前所在路径2. cd 改变路径、切换路径3. 家目录 回到顶级目录4. 当前路径和上一路径5. 上一次路径6. 绝对路径和相对路径7. ls 列出目录内容8. mkdir 创建目录9. rmdir 删除目录10. touch 创建文件11. mv 修改文件目录、移动路径12. cp 复…

一口吃掉Linux基础操作

一般在windows上面想要操作Linux系统就需要装软件搞一个虚拟机,我用的是Ubuntu22,就是Linux的发行版.安装Ubuntu的过程比较复杂,最重要的一点是安装时要断网,否则会很慢。 Ubuntu 配置指南 — 地震“学”科研入门教程 先介绍一个…

光伏便携式EL检测仪是什么?—科技助农

光伏便携式EL监测仪是一种专门用于检测光伏电池组件性能的高效、实用的设备。它利用电致发光(Electroluminescence,EL)原理,通过检测光伏板在受到光照后产生的电流所激发出的光线,来评估光伏板的性能。这种设备通常具有…

C++初阶:2_类与对象(上)

类与对象(上) 一.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之…

【DAY10 软考中级备考笔记】数据结构 图

数据结构 图 3月11日 – 天气:晴 晚上无线网络突然不能用了,花费好久弄这个,耽误了一些时间 1. 图的定义 这里需要注意完全图的定义,以及完全图的边数 这里需要注意连通图和连通分量的概念。 2. 图的存储结构 图有两种存储结构&a…

Java操作Sql语句 出现迭代死循环 (Bug排查)

目录 1. 问题所示2. 原理分析3. 解决方法4. 彩蛋1. 问题所示 Java执行Sql语句来查询一些数据的时候 虽说数据量很大,但是查询过程中一直迭代查询 截图如下所示: 2. 原理分析 至于迭代死循环,可能是不满足的条件也进入查询(本身我的数据量就很大) 主要可能引起的两个原…

C#/WPF 清理任务栏托盘图标缓存

在我们开发Windows客户端程序时,往往会出现程序退出后,任务还保留之前程序的缓存图标。每打开关闭一次程序,图标会一直增加,导致托盘存放大量缓存图标。为了解决这个问题,我们可以通过下面的程序清理任务栏托盘图标缓存…

【UE5】非持枪趴姿移动混合空间

项目资源文末百度网盘自取 创建角色在非持枪状态趴姿移动的动画混合空间 在BlendSpace文件夹中单击右键选择 动画(Animation) 中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_NormaProne 打开BS_NormaProne 水平轴表示角色的方向,命名为Directi…

SecureCRT出现乱码的解决方法

SecureCRT是一个商业终端连接工具,它支持多种自定义设置。默认设置下,通过SecureCRT连接SSH服务器可能出现中文乱码的情况。这是由于SecureCRT字符编码与服务器的字符编码不一致造成的。 当然解决这个问题也很简单,将SecureCRT字符编码设置成…

ACM记忆化DFS与基于优先队列的BFS

基本概念--记忆化DFS 使用数组保存已经算出来的值,在后续的计算中减少大量的重复计算,提高效率。(用于dp不方便,但是搜索方便的情况,可以提升效率。) eg. 记忆化dfs求解斐波那契数列 int dfs(int n) {if…

idea Springboot 数码商城系统LayUI框架开发mysql数据库web结构java编程计算机网页

一、源码特点 springboot 数码商城系统是一套完善的完整信息系统,结合mvc框架和LayUI框架完成本系统springboot spring mybatis ,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整…

SpringMVC请求、响应和拦截器的使用

SpringMVC请求 RequestMapping注解 RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系 RequestMapping注解可以作用在方法和类上 1. 作用在类上:第一级的访问目录 2. 作用在方法上:第二级的访问目录 3. 细节:路径可以不编写…

软件设计师:06-程序设计语言与语言处理程序基础

章节章节01-计算机组成原理与体系结构07 - 法律法规与标准化与多媒体基础02 - 操作系统基本原理08 - 设计模式03 - 数据库系统09 - 软件工程04 - 计算机网络10 - 面向对象05 - 数据结构与算法11 - 结构化开发与UML06 - 程序设计语言与语言处理程序基础12 - 下午题历年真题End -…

windows达梦安装

1.首先准备好windows安装系统,准备工作的做好,然后把素材包dm8_20230418_x86_win_64放进去,进行解压 解压完成之后,把dm8_20230418_x86_win_64再次进行解压,然后点击安装setup进行安装 然后点击接受进行下一步&#xf…

搭建Docker私有仓库registry

下载registry registry是Docker官方提供的仓库镜像 拉取镜像,不指定版本默认拉取最新版本镜像。 docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4…

ZooKeeper命令和监控详解

ZooKeeper监控命令详解 在分布式系统中,ZooKeeper作为一个非常重要的协调服务,它的健康状态直接影响到整个系统的可靠性和稳定性。因此,对ZooKeeper进行有效监控是非常必要的。本文将详细介绍ZooKeeper提供的命令行工具zkCli.sh,…

vue2之过滤器

过滤器 过滤器的实现类似Django的过滤器。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>过…

Mysql---库表操作

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.Mysql数据库简介 MySQL是一种关系型数据库管理系统&#xff0c;是最流行的开源数据库之一。它是由瑞典MySQL AB公司开发的&#xff0c;后来被Sun Microsystems收购&#xff0c;之后又被Oracl…

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型。 架构治理演进: 架构治理是指通过设立和执行一套政策和程序,来管理和控制一个组织的架构活动。架构治理演进是一个持续的过程,需要根据组织的实际情况进行定期审查和调整。 在演进过程中,重点需要…