当前位置: 首页 > news >正文

IO基础(字符集与字符流)

在字节流中,文件中的中文显示的是乱码。

在计算机存储体系中,以字节为最小存储单位,一个英文占一字节

字符集类型

  • ASCII字符集,又叫编码表,编码表中有128个数据,其中大小写字母、符号、数字等。
  • GB2312字符集:1981年5月1日实施的简体中文汉字编码国家标准,收录了7445个图形字符,其中包括6763个简体汉字。
  • BIG5字符集:台湾地区繁体中文标准字符集,共收录13053个中文字,1984年实施。
  • GBK字符集:2000.3.17发布,收录21003个汉字。包含国家标准GB13000-1中的全部中日韩汉字,和BIG编码中的所有汉字。(简体中文Windows系统默认使用GBK,系统显示ANSI)
  • Unicode字符集:国家标准字符集,它将世界各种语言的每一个字符定义一个唯一的编码,以满足跨语言、跨平台文本信息转换。
GBK 存储规则:

GBK存储英文,完全兼容ASCII码。

存储中文

扩展:解码都是直接转为十进制

Unicode万国码存储规则

UTF存储英文:有三个规则:UTF-8编码规则、UTF-16规则、UTF-32规则

UTF存储中文:

乱码出现原因:

  • 读取数据时未读完整个汉字,当利用字节流读取文字时,一个汉字会被分为3个字节读取 
  • 编码和解码时的方式不统一,eg

防止乱码出现办法:

  1. 不要用字节流读取文本文件
  2. 编码解码使用同一个码表,同一个编码方式
 编码与解码方法

编码:将我们要存储的数据根据一定的规则编译为计算机能够存储的字节数据

public byte[ ]  getBytes()使用默认方式进行编码
public byte[ ]  getBytes(String charsetName)使用指定方式进行编码

解码:

String(byte[ ]  bytes)使用默认方式进行解码
String(byte[ ]  bytes,String charsetName)使用指定方式进行编码

字符流

字符流的底层是字节流:

字符流=字节流+字符集

特点:

  • 输入流:一次读一个字节,遇到中文时,一次读多个字节(与字符集有关)
  • 输出流:底层会把数据按照指定的编码方式进行编码,变成字节在写到文件中

 适合纯文本文件的读写操作。

字符流:Reader(字符输入流)    Writer(字符输出流)

FileReader

使用步骤:

1.创建字符输入流对象

public FileReader(File fille)创建字符输入流关联本地文件
public FileReader(String pathname)创建字符输入流关联本地文件

File对象表示的文件路径以及字符串表示的文件路径,如果文件不存在就会报错

2.读取数据

public int read()读取数据,读到末尾返回-1
public int read(char[ ] buffer)读取多个数据,读到末尾返回-1
  • 空参读取:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数(read返回的十进制,是字符集上的数字)
  • 读到文件末尾,read方法返回-1

3.释放资源

public int close()         //释放资源/关流

 空参read()方法的使用:

有参read()方法的使用:

FileWriter

FileWrite构造方法:

public FileWriter(File file )创建字符输出流关联本地文件
public FileWriter(String pathname)创建字符输出流关联本地文件
public FileWriter(File file,boolean append)创建字符输出流关联本地文件,续写
public FileWriter(String pathname,boolean append)创建字符输出流关联本地文件,续写

FileWrite成员方法:

void write(int c)写出一个字符
void write(String str)写出一个字符串
void write(String str,int off,int len)写出一个字符串的一部分
void write(char[ ] cbuf)写出一个字符数组
void write(char[ ] cbuf,int off,int len)写出字符数组的一部分

使用流程:

1.创建字符输出流对象

  • 参数是字符串表示的路径或者File对象
  • 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在
  • 如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关

2.写数据

  • 如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符

3.释放资源

  • 每次使用完流都要释放资源

 使用步骤代码实现:

StringBuilder类

对字符串拼接原理:(String类在Java流程控制中有说明)

利用StringBuilder可变字符串序列,解决浪费内容问题。

String和StringBuilder的区别:

  • String:内容不可变
  • StringBuilder:内容可变

StringBuilder主要构造方法: 

StringBuilder()无参构造,创建一个空白可变字符串对象
StringBuilder(String str)指定字符串内容的构造方法

代码演示:

 StringBuilder方法
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相关的字符序列

代码演示:

 

所以在添加数据时,可以不创建另一个对象存数据。

 反转,顾名思义,将sb中的内容从后往前输出。

StringBuilder和String相互转换

StringBuilder转换为String

public String toString():通过toString()就可以实现

String转换为StringBuilder

public StringBuilder(String s)

代码演示:

拼接字符串

定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,在控制台输出结果。eg:int[ ] arr={1,2,3}l,执行方法后输出结果:[1,2,3]

综合练习

拷贝

字节流:任意类型的文件

字符流:读取纯文本文件中的数据,往纯文本文件中写出数据

拷贝一个文件夹加,考虑子文件夹

//拷贝文件夹下所有内容
public class Test1 {public static void main(String[] args) throws IOException {//创建对象,数据源File src=new File("D:\\test");//目的地File dest=new File("D:\\dest");//调用方法开始拷贝copydir(src,dest);}//创建拷贝方法private static void copydir(File src, File dest) throws IOException {//dest不存在,创建dest文件夹dest.mkdirs();//1.进入数据源File[] files = src.listFiles();//记录文件夹中的文件及路//2.遍历数组for (File file:files){//增强for循环,将数组files中的每一项赋值给fileif (file.isFile()){//3.判断文件,拷贝 文件开始,文件结束,dest是文件夹FileInputStream fis=new FileInputStream(file);//要拷贝的文件FileOutputStream fos=new FileOutputStream(new File(dest,file.getName()));//文件的目的地byte[] bytes=new byte[1024];//一个读取1024个字节int len;while ((len=fis.read(bytes))!=-1){fos.write(bytes,0,len);}fos.close();//4.关闭资源,先开的后关fis.close();}else{//4.判断文件夹,递归copydir(file,new File(dest,file.getName()));//要拷贝的文件夹,目的地}}}
}
文件加密

为了保证文件的安全性,需要对原始文件进行加密存储,再使用的时候在对其进行解密处理。

加密原理:对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。

解密原理:读取加密之后的文件,按照加密的规则反向操作,变成原始文件。

//文件加密
public class Test2 {public static void main(String[] args) throws IOException {//异或:^ 相同为0 不同为1//eg:100^10=110     110^10=100FileInputStream fis=new FileInputStream("C_S\\b.png");FileOutputStream fos=new FileOutputStream("C_S\\b1.png");//加密处理int b;while ((b=fis.read())!=-1){fos.write(b^2);}fos.close();fis.close();}
}
修改文件中的数据

文本文件中有以下的数据:2-1-9-4-7-8

将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9

代码实现:

//更改文件内容
public class Test3 {public static void main(String[] args) throws IOException {//1.读取数据FileReader fr=new FileReader("C_S\\a.txt");//数据读入程序StringBuilder sb=new StringBuilder();//StringBuilder功能:拼接读取到的数据int ch;while ((ch=fr.read())!=-1){sb.append((char)ch);//将读取到的数据拼接到sb中}fr.close();System.out.println(sb);//2.排序String str=sb.toString();//将sb内容变成字符串形式String[] arrstr=str.split("-");//根据-进行切割,得到字符串类型的219478ArrayList<Integer> list=new ArrayList<>();for(String s:arrstr){//遍历字符串数组int i = Integer.parseInt(s);//一次能够将一个字符串类型整数变成int性整数list.add(i);//将转换后的数字保存在list集合中}System.out.println(list);//测试集合是否有数字Collections.sort(list);//集合中的排序方法,默认从小到大System.out.println(list.size());//3.写出FileWriter fw=new FileWriter("C_S\\a.txt");for (int i = 0; i < list.size(); i++) {//遍历集合listif (i==list.size()-1){//如果说集合中最后一位,则直接输出fw.write(list.get(i)+"");//不能直接写i,write会将其转换对应ASII码// ,+“”,将其转换为字符串输出}else {//不是最后一位,加-输出fw.write(list.get(i)+"-");}}fw.close();}
}

 

 

相关文章:

IO基础(字符集与字符流)

在字节流中&#xff0c;文件中的中文显示的是乱码。 在计算机存储体系中&#xff0c;以字节为最小存储单位&#xff0c;一个英文占一字节。 字符集类型 ASCII字符集&#xff0c;又叫编码表&#xff0c;编码表中有128个数据&#xff0c;其中大小写字母、符号、数字等。GB2312…...

LLM应用-prompt提示:RAG query重写、相似query生成 加强检索准确率

参考&#xff1a; https://zhuanlan.zhihu.com/p/719510286 1、query重写 你是一名AI助手&#xff0c;负责在RAG&#xff08;知识库&#xff09;系统中通过重构用户查询来提高检索效果。根据原始查询&#xff0c;将其重写得更具体、详细&#xff0c;以便更有可能检索到相关信…...

[python脚本处理文件入门]-17.Python如何操作Excel文件的读写

哈喽,大家好,我是木头左! 在Python中,处理Excel文件最常用的库之一是xlrd,它用于读取Excel文件。而当需要创建或写入Excel文件时,xlwt库则是一个不错的选择。这两个库虽然功能强大,但使用起来也非常简单直观。 安装与导入 确保你已经安装了这两个库。如果没有安装,可以…...

深度理解进程的概念(Linux)

目录 一、冯诺依曼体系 二、操作系统(OS) 设计操作系统的目的 核心功能 系统调用 三、进程的概念与基本操作 简介 查看进程 通过系统调用获取进程标识符 通过系统调用创建进程——fork() 四、进程的状态 操作系统中的运行、阻塞和挂起 理解linux内核链表 Linux的进…...

【C++】STL容器中的比较函数对象

目录 set、map容器 priority_queue容器 在STL中涉及到以某种规则排序的容器都需要比较函数对象&#xff0c;比如&#xff1a;set、map、priority_queue这些容器内部都是依赖比较函数对象以某种规则存储数据的。STL容器中的比较函数对象可以是&#xff1a;函数指针、仿函数(函…...

深度学习基础02_损失函数BP算法(上)

目录 一、损失函数 1、线性回归损失函数 1.MAE损失 2.MSE损失 3.SmoothL1Loss 2、多分类损失函数--CrossEntropyLoss 3、二分类损失函数--BCELoss 4、总结 二、BP算法 1、前向传播 1.输入层(Input Layer)到隐藏层(Hidden Layer) 2.隐藏层(Hidden Layer)到输出层(Ou…...

6.584-Lab4A

6.584-LabA HomeworkReference CodeReference Blog 通过作业提供的概览图可以看出整个系统的组成&#xff1a;用户 Clerk 会发出命令&#xff08;Get、Put、Append&#xff09;到每个 Service&#xff0c;每个 Service 接收到命令后向下传递到 RaftCode 层&#xff0c;由 RaftC…...

语义版本控制

注意&#xff1a; 本文内容于 2024-11-27 22:25:05 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;语义版本控制。感谢您的关注与支持&#xff01; 由于自己平时喜欢写点小玩意&#xff0c;自然而…...

深入理解HTML基本结构:构建现代网页的基石

深入理解HTML基本结构&#xff1a;构建现代网页的基石 在数字时代&#xff0c;HTML&#xff08;超文本标记语言&#xff09;是构建和设计网页的基础。了解HTML的基本结构对于任何希望掌握网页开发的人来说至关重要。本文将详细介绍HTML文件的基本骨架&#xff0c;包括其核心标…...

一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单

近日&#xff0c;由 FreeBuf 主办的 FCIS 2024 网络安全创新大会在上海隆重举行。大会现场揭晓了第十届 WitAwards 中国网络安全行业年度评选获奖名单&#xff0c;该评选自 2015 年举办以来一直饱受赞誉&#xff0c;备受关注&#xff0c;评选旨在以最专业的角度和最公正的态度&…...

【机器学习】机器学习的基本分类-监督学习(Supervised Learning)

监督学习是一种通过已有的输入数据&#xff08;特征&#xff09;和目标输出&#xff08;标签&#xff09;对模型进行训练的机器学习方法&#xff0c;旨在学到一个函数&#xff0c;将输入映射到正确的输出。 1. 监督学习概述 监督学习需要&#xff1a; 输入数据&#xff08;特…...

Oracle之提高PLSQL的执行性能

目录 1、SQL解析详解 2、演示示例 3、启用Oracle跟踪事件 4、查看改造后SQL性能对比结果 更多技术干货,关注个人博客吧 1、SQL解析详解 SQL解析是数据块处理SQL语句不可缺少的步骤,是在解析器中执行的。将SQL转换成数据库可以执行的低级指令。 SQL解析分为硬解析和软…...

[VSCode] vscode下载安装及安装中文插件详解(附下载文件)

前言 vscode 链接&#xff1a;https://pan.quark.cn/s/3acbb8aed758 提取码&#xff1a;dSyt VSCode 是一款由微软开发且跨平台的免费源代码编辑器&#xff1b;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能&#xff0c;并且内置了命令行工具和Git版本控制系统。 …...

PHP中类名加双冒号的作用

在 PHP 中&#xff0c;类名加双冒号&#xff08;::&#xff09; 是一种用于访问类的静态成员和常量的语法。它也可以用来调用类的静态方法和访问 PHP 的类相关关键词&#xff08;如 parent、self 和 static&#xff09;。以下是详细的解释和用法。 1. 用途概述 :: 被称为作用域…...

前端编程训练 异步编程篇 请求接口 vue与react中的异步

文章目录 前言代码执行顺序的几个关键点接口请求vue与react中的异步vue中的异步react的state修改异步 前言 本文是B站三十的前端课的笔记前端编程训练,异步编程篇 代码执行顺序的几个关键点 我们可以理解为代码就是一行一行&#xff0c;一句一句是执行&#xff08;定义变量&…...

【kafka03】消息队列与微服务之Kafka 读写数据

Kafka 读写数据 参考文档 Apache Kafka 常见命令 kafka-topics.sh #消息的管理命令 kafka-console-producer.sh #生产者的模拟命令 kafka-console-consumer.sh #消费者的模拟命令 创建 Topic 创建topic名为 chen&#xff0c;partitions(分区)为3&#xff0…...

【分布式系统】唯一性ID的实现

1、UUID&#xff08;通用唯一标识符&#xff09; 1、UUID本身 一种用于标识信息的标准化方法。一个128位的数字&#xff0c;常表示为32个十六进制数字&#xff0c;以连字符分隔成五组&#xff1a;8-4-4-4-12。 版本&#xff1a; UUID有不同的版本&#xff0c;最常见的是基于时…...

哪里能找到好用的动物视频素材 优质网站推荐

想让你的短视频增添些活泼生动的动物元素&#xff1f;无论是搞笑的宠物瞬间&#xff0c;还是野外猛兽的雄姿&#xff0c;这些素材都能让视频更具吸引力。今天就为大家推荐几个超实用的动物视频素材网站&#xff0c;不论你是短视频新手还是老手&#xff0c;都能在这些网站找到心…...

SRAM芯片数据采集解决方案

SRAM芯片数据采集解决方案致力于提供一种高效、稳定且易于操作的方法&#xff0c;以确保从静态随机存取存储器SRAM芯片中准确无误地获取数据。 这种解决方案通常包括硬件接口和软件工具&#xff0c;它们协同工作&#xff0c;以实现对SRAM芯片的无缝访问和数据传输。 在硬件方…...

【贪心算法第七弹——674.最长连续递增序列(easy)】

目录 1.题目解析 题目来源 测试用例 2.算法原理 3.实战代码 代码分析 1.题目解析 题目来源 674.最长递增子序列——力扣 测试用例 2.算法原理 贪心思路 3.实战代码 class Solution { public:int findLengthOfLCIS(vector<int>& nums) {int n nums.size();in…...

[AI] 知之AI推出3D智能宠物:助力语言学习与口语提升的新选择

Hello! 知之AI官网 [AI] 知之AI推出3D智能宠物&#xff1a;助力语言学习与口语提升的新选择 随着人工智能技术的飞速发展&#xff0c;虚拟助手和智能设备不断进入我们的生活。近日&#xff0c;知之AI重磅推出了一款创新产品——3D智能宠物。这一产品不仅具备多国语言交流能力&…...

Android 14之HIDL转AIDL通信

Android 14之HIDL转AIDL通信 1、interface接口1.1 接口变更1.2 生成hidl2aidl工具1.3 执行hidl2aidl指令1.4 修改aidl的Android.bp文件1.5 创建路径1.6 拷贝生成的aidl到1和current1.7 更新与冻结版本1.8 编译模块接口 2、服务端代码适配hal代码修改2.1 修改Android.bp的hidl依…...

【R库包安装】R库包安装总结:conda、CRAN等

【R库包安装】R studio 安装rgdal库/BPST库 R studio 安装rgdal库解决方法 R studio 安装BPST库&#xff08;github&#xff09;解决方法方法1&#xff1a;使用devtools安装方法2&#xff1a;下载安装包直接在Rstudio中安装 参考 基础 R 库包的安装可参见另一博客-【R库包安装】…...

学习PMC要不要去培训班?

在当今快速变化的商业环境中&#xff0c;PMC作为供应链管理的核心环节之一&#xff0c;其重要性日益凸显。PMC不仅关乎产品的物料计划、采购、库存控制及物流协调&#xff0c;还直接影响到企业的生产效率、成本控制以及市场竞争力。面对这一专业领域的学习需求&#xff0c;许多…...

前端 用js封装部分数据结构

文章目录 Stack队列链表Setset 用来数组去重set用来取两个数组的并集set用来取两个数组的交集set用来取两个数组的差集 字典 Stack 栈&#xff0c;先进后出&#xff0c;后进先出。用数组来进行模拟&#xff0c;通过push存入&#xff0c;通过pop取出。 class Stack {// 带#表示…...

cocoscreator-doc-TS:目录

cocoscreator-doc-TS-脚本开发-访问节点和组件-CSDN博客 cocoscreator-doc-TS-常用节点和组件接口-CSDN博客 cocoscreator-doc-TS-脚本开发-创建和销毁节点-CSDN博客 cocoscreator-doc-TS-脚本开发-加载和切换场景-CSDN博客 cocoscreator-doc-TS-脚本开发-获取和设置资源-CS…...

理解Java集合的基本用法—Collection:List、Set 和 Queue,Map

本博文部分参考 博客 &#xff0c;强烈推荐这篇博客&#xff0c;写得超级全面&#xff01;&#xff01;&#xff01; 图片来源 Java 集合框架 主要包括两种类型的容器&#xff0c;一种是集合&#xff08;Collection&#xff09;&#xff0c;存储一个元素集合&#xff08;单列…...

IOC容器实现分层解耦

文章开始之前&#xff0c;先引入软件开发的两个名词&#xff1a;耦合和内聚。耦合是指&#xff1a;衡量软件中各个层&#xff08;三层架构&#xff09;/各个模块的依赖关联程度&#xff1b;内聚是指&#xff1a;软件中各个功能模块内部的功能联系。三层架构中Controller、Servi…...

Flutter 共性元素动画

在 Flutter 中&#xff0c;共性元素动画&#xff08;Shared Element Transitions&#xff09;用于在页面导航或组件切换时创建视觉上更流畅和连贯的动画效果。这种动画可以使用户感受到两个界面之间的“物理联系”&#xff0c;比如图片从缩略图到全屏的扩大效果。 前置知识点整…...

K8s内存溢出问题剖析:排查与解决方案

文章目录 一、背景二、排查方案&#xff1a;1. 可能是数据量超出了限制的大小&#xff0c;检查数据目录大小2. 查看是否是内存溢出2.1 排查数据量&#xff08;查看数据目录大小是否超过limit限制&#xff09;2.2 查看pod详情发现问题 三、解决过程 一、背景 做redis压测过程中…...

南京专业的网站设计团队/整合营销传播方案

如题&#xff1a;小弟现在遇到了一个很郁闷的问题&#xff1a;我写了一个h5单页面page1.html&#xff1b;我有一个common.js文件&#xff0c;里面是一些公共方法&#xff0c;如字符串转base64等这些。然后在page1.html中直接引入common.js然后在测试的时候发现&#xff1a;当我…...

二手市场网站建设的目的/优化设计七年级下册数学答案

1&#xff0c;确保Linux镜像的路径存在 2&#xff0c;启动 3&#xff0c;在真实机情况下&#xff0c;进入BIOS修改安装操作系统的路径【记住&#xff1a;虚拟机不需要这一步。】 如果是真实机安装Linux&#xff0c;默认是从硬盘中安装&#xff0c;而不是从光盘。这就需要更改设…...

海门市住房和城乡建设局网站/花西子网络营销策划方案

bug1:while循环中的*des *src; 不能这么写吧。。。 bug2&#xff1a;maxSize没有定义 暂时看到这么多转载于:https://www.cnblogs.com/yuanyue-nenu/p/7702004.html...

制作网站电话/权重查询爱站网

News计算机与网络英语词汇(C3)Source:2008-07-19我要投稿论坛 Favoritechip 晶 片chip carriei 芯片载体chip device configuration 芯片装置组态chip enable(CE) 切片便能chip LSI technology 芯片大型集体化工艺学chip materials 芯片材料chip memory 芯片记忆(器)chip mic…...

专做白酒的网站/搜索引擎排名中国

1.新建解析器 SAXReader reader new SAXReader(); 2.新建文本对象 File f new File("file path"); 3.解析文本对象–>Document对象 Document doc reader.read(f); 4.获取根元素 Element root doc.getRootElement(); 5.根据根元素获取全部的子节点 It…...

石家庄有哪些做网站的公司/百度销售推广

1、下载安装git 及设置&#xff08;windows版&#xff09; 网址&#xff1a;https://git-scm.com/download/win 1&#xff09;点击Git for Windows Setup版本下载&#xff1a; 2&#xff09;点击exe文件安装&#xff0c;一路Next&#xff0c;安装完成后桌面或目录下右键打开…...