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…

LUA语法复习总结

文章目录 简记变量数据类型运算符算术运算符关系运算符逻辑运算符杂项运算符 列表(表)表格操作表连接插入和删除排序表 模块元表__index 元方法实例 总结__newindex 元方法实例实例 为表添加操作符实例 __call 元方法实例 __tostring 元方法实例 简记 lua下标从1开始迭代器pai…

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…

ms office学习记录:Word㈣ 布局设计引用选项卡 对应配套作业㈤

⒈页面设置 (主要考查页面设置对话框) 页码范围:对称页边距/拼页(在一张纸上从左往右打印两页内容) 行号可在两个位置设置 若找不到规定纸张大小,则文件→打印→更换驱动打印机 ⒉页面背景 页面颜色&a…

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

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

python使用词袋模型将句子向量化,使用KNN进行文本分类

要使用词袋模型将句子向量化,并使用KNN进行分类,你可以使用Python的sklearn库。以下是一个简单的例子: 加载数据集文本预处理(如分词、去除停用词等)使用词袋模型进行向量化使用KNN进行训练和分类 首先,确…

RockChip Android13 修改U盘挂载目录

环境:Android13 安卓默认U盘挂载目录为设备UUID,如下所示: /dev/block/vold/public:8,0 on /mnt/media_rw/1E46712C467105B5 type fuseblk (rw,dirsync,nosuid,nodev,noatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) /dev/fuse on /mnt/user/…

自动化运维技术与工具整合

以下这些自动化运维技术与工具覆盖了软件开发和运维的多个关键领域:自动化配置管理、容器化、容器编排、监控与可视化、自动化构建与部署、基础设施及应用配置管理、性能监控,以及日志分析。Ansible 简介: Ansible 是一个开源的自动化平台,用…

C++/CLI学习笔记7(快速打通c++与c#相互调用的桥梁)

3.11 操作符和表达式 操作符说明=赋值操作符 a=b=0;+,-,*,/,%,+=,-=,*=,/=,%=,++,--算术操作符 int a,b,c; a=b=c-0; b=++a; c=b-a+b*a; ... >,>=,<,<=,==,!=关系操作符 a > b // a大于b就返回true a >= b // a大于或等于b就返回true a < b //a小于b就返…

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

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

【C++函数速查】lower_bound和upper_bound使用方法详细解读

文章目录 1&#xff09;概述2&#xff09;函数使用3&#xff09;案例代码 1&#xff09;概述 l o w e r _ b o u n d ( ) lower\_bound() lower_bound() 和 u p p e r _ b o u n d ( ) upper\_bound() upper_bound() 都是基于二分查找在一个排好序的数组或容器&#xff08;如 …

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

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

C 练习实例76-求倒数和

题目&#xff1a;编写一个函数&#xff0c;输入n为偶数时&#xff0c;调用函数求1/21/4...1/n,当输入n为奇数时&#xff0c;调用函数1/11/3...1/n(利用指针函数)。 代码 #include <stdio.h> void fun1(int n,double *ret) {for(int i1;i<n;i2)*ret1.0/i; } void fun…

SecureCRT出现乱码的解决方法

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

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

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

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

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