字符流,编码表,字符流写数据,字符流读数据

news2024/10/2 16:23:10

文章目录

  • 前言
  • 字符流
  • 编码表
  • 字符串中的编码解码问题
  • 字符流写数据
  • 字符流读数据
  • 总结

前言

因为近期考试原因,还有自身惰性的问题,小编最近停更了一段时间,随之而来的罪恶感让我又开启了自学与创作之路,学习这么久,自己虽然发布了许多博客,但是大部分都是看着笔记写的,导致学的不是很扎实,所以希望自己在以后的博客中能更多的融入自己的一些想法,能将所学知识灵活运用!

字符流

今天主要学习的是字符流和字符缓冲流,上次我们说过,字节流可以操作所有文件,所以为什么还要学习字符流呢?原因有以下几点:

1.如果利用字节流,把文本文件中的中文,读取到内存中,有可能出现乱码。
2.如果利用字节流,把中文写到文本文件中,也有可能出现乱码。

我们要理解这个过程,首先要知道编码表

编码表

有以下基础知识首先要知道:

1.计算机中存储的信息都是用二进制数表示的。
2.按照某种规则,将字符变成二进制,再存储到计算机中,称为编码。
3.编码和解码的方式必须一致,否则会导致乱码。

简单理解一下,也就是说,存储一个字符 a,首先需要在码表中查到对应的数字是97,然后转换成二进制进行存储.读取的时候,先把二进制解析出来,再转换成97,通过97查找到对应的字符串a,这也就是编码和解码的过程。
上述我们所提到的码表也就是编码表包括:

1.ASCII字符集:
  ASCII:包括了数字,大小写字符和一些常见的标点符号
  注意:ASCII码表中是没有中文的。
  
2.GBK:window系统默认的码表。兼容ASCII码表,也包括了21033个汉字,并支持
  繁体字以及部分日韩文字。
  注意:GBK是中国的码表,一个中文以两个字节的形式存储。但不包括世界上所有
  国家的汉字。
  
  3.Unicode码表:
  	由国际组织ISO制定,是统一的万国码,计算机科学领域里的一项业界标准,容
  	纳世界上大多数国家的所有常见文字和符号。但是因为表示的字符太多了,所
  	以Unicode码表中得出数字不是直接以二进制的形式存储到计算机的。
  	会先通过 UTF-7,UTF-7.5,UTF-8,UTF-16,以及UTF-32进行编码,再存储到计
  	算机。所以我们经常说的UTF-8不是编码表,而是一种编码方式。
  	注意:Unicode是万国码,以UTF-8编码后的一个中文以三个字节的形式存储。	

在这里,我们需要记住两个重点

	1.windows默认使用码表为GBK,一个字符两个字节。
	2.idea和以后工作默认使用Unicode的 UTF-8编解码格式,一个中文三个字节。

字符串中的编码解码问题

方法名说明
byte[] getBytes()使用平台的默认字符集将该String编码为一系列字节
byte[] getBytes(String charsetName)使用指定的字符集将该 String 编码为一系列字节
String (bytes[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串
String(byte[]bytes,String charset Name)通过指定的字符集解码指定的字节数组来创建字符串

注意:这四个方法都是String 类中的方法。

  • 代码演示:
package com.hcx;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class Demo1 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String s = "中国";
        byte[] bytes1 = s.getBytes();//以系统默认的编码进行编码
        byte[] bytes2 = s.getBytes("utf-8");//以utf-8的编码方式进行编码
        byte[] bytes3 = s.getBytes("gbk");//以gbk的编码方式进行编码
        System.out.println(Arrays.toString(bytes1));
        System.out.println(Arrays.toString(bytes2));
        System.out.println(Arrays.toString(bytes3));
        System.out.println("==================");

        String s1 = new String(bytes1);//以系统默认的方式进行解码
        String s2 = new String(bytes1, "utf-8");//以utf-8的字符集进行解码
        String s3 = new String(bytes1, "gbk");//以gbk字符集的方式进行解码
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
}

  • 控制台输出:
    在这里插入图片描述
    如上,我们也可以看出,IDEA默认编码和解码方式为 UTF-8,并且以UTF-8编码后一个中文用三个字节存储,以GBK编码后一个中文用两个字节存储

字符流写数据

字符流写数据,有两种形式:

	writer:用于写入字符流的抽象父类
	FileWriter:用于写入字符流的抽象子类

一般常用FileWriter
我们下面来介绍它的构造方法

方法名说明
FileWriter(File file)根据给定的 File 对象构造一个 FileWriter 对象
FileWriter(File file, boolean append)根据给定的 File 对象构造一个 FileWriter 对象
FileWriter(String fileName)根据给定的文件名构造一个 FileWriter 对象
FileWriter(String fileName,boolean append)根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象

接下来是它的成员方法

方法名说明
void write(int c)写一个字符
void write(char[] cbuf)写入一个字符组
void write(char[] cbuf,int off,int len)写入字符数组的一部分
void write(String str)写一个字符串
void write(String str,int off, int len)写一个字符串的一部分

还有刷新关闭方法

方法名说明
flush()刷新流,之后还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据
  • 代码演示:
package com.hcx;

import java.io.FileWriter;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        FileWriter fileWriter = new FileWriter("a.txt");
        fileWriter.write(97);//写一个字符
        fileWriter.write(98);
        fileWriter.write(99);
        fileWriter.write("\r\n");

        char[] chs={'a','b','c','d','e'};//写入一个字符数组
        fileWriter.write(chs);
        fileWriter.write("\r\n");

        fileWriter.write(chs,0,3);//写入字符数组的一部分
        fileWriter.write("\r\n");

        fileWriter.write("abcde");//写入一个字符串
        fileWriter.write("\r\n");

        fileWriter.write("abcde",0,3);//写入字符串的一部分
        fileWriter.close();

    }
}
  • 当前模块写 a.txt文件内容:

在这里插入图片描述

字符流读数据

字符流读数据也有两种形式

	Reader:用于读取字符流的抽象父类
	FileReader:用于读取字符流的常用子类

一般用FileWriter
我们接下来介绍它的构造方法

方法名说明
FileReader(File file)在给定从中读取数据的 File 的情况下创建一个新 FileReader
FileReader(String fileName)在给定从中读取数据的文件名的情况下创建一个新 FileReader

接下来是它的成员方法

方法名说明
int read()一次读一个字符数据
int read(char[] cbuf)一次读一个字符数组数据
  • 代码演示:
package com.hcx;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Demo3 {
    public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader("a.txt");

        //一次读取一个数据
        int ch;
        while((ch=fileReader.read())!=-1){
            System.out.print((char)ch);
        }

         //一次读取一个字符数组数据

        char[] chars = new char[1024];
        int len;
        while((len = fileReader.read(chars))!= -1){
            System.out.print(new String(chars,0,len));
        }
    }
}

总结

	本篇文章介绍了为什么要使用字符流,然后介绍了几种编码表,字符串中的编码
	和解码过程以及问题(中文乱码)以及字符流的使用,字符流写数据、字符流读
	数据,希望大家多多支持,你们的支持,是我前进的动力!		

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

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

相关文章

来源稳定的l2逐笔接口数据去哪找?

l2逐笔接口的逐笔数据的最初来源均是从交易所获取,其授予了一些信息服务商L2非展示数据接口转发权限,其中包含了逐笔成交、逐笔委托等数据。使用时,通常是从信息商处购买,比如同花顺、万得、国泰安等等。那么小编认为通过交易所授…

mysql中find_in_set()函数的使用及in()用法详解

MySQL手册中find_in_set函数的语法解释: FIND_IN_SET(str,strlist) str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8,10,22) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strli…

Linux:rpm与yum(内含:1.rpm介绍+2.卸载rpm包+3.安装rpm(应用案例)+4.yum(应用案例))

1.rpm介绍使用: 实例:查看当前系统是否安装了 firefox ,操作如下: 解释: 名称:firefox 版本号:91.11.0-2 使用操作系统:el7.centos.x86_64 表示centos.x的64位系统。 查询软件包是否安装&#…

跨境电商卖家必知的9个圣诞节营销技巧

关键词:跨境电商卖家、圣诞节营销 圣诞节——对跨境电商卖家来说是非常重要的促销节日。根据以往的经验,您或许已经有了初步的促销想法,想知道您今年的跨境电子商务营销策略是否正确?为您整理了跨境电商卖家必须注意的营销技巧&am…

TiDB数据库架构——TiDB Server

TiDB Server架构 TiDB Server 是SQL层,无状态,启动多个TiDBServer,均匀分摊,解析SQL,获取真实数据。 Protocol Layer、:负责客户端的连接。 Parse、Compile:负责SQL语句的解析和编译&#xff…

信息控制信息卷积

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景

少儿编程 电子学会图形化 scratch编程等级考试四级真题答案解析(判断题)2022年9月

目录 2022年9月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 推荐资料

java学生作业带选课管理系统ssh

1.管理员具有对学校课程信息,教师信息,学生信息增删改查的权限 (1)可以录入学校所开课程,学生信息,教师信息; (2)可以对教师的开课信息进行增加,删除&#xf…

什么是 DeGods NFT 系列?

Nov. 2022, Vincy Data Source: Footprint Analytics - DeGods NFT Collection DeGods 系列有 10,000 个 Solana 铸造头牌的 NFT。 DeGods 持有者拥有访问 DeDAO 的权限和社区。 它在 1 月推出 DUST 协议,允许持有者质押他们的 DeGods NFT 并赚取 DUST。 10 月 …

cmake 工具 三 add_libary, set_target_properties,link_libary, target_link_libary

一起通过一个例子学一下 add_libary, set_target_properties,link_libary, target_link_libary 四个命令 首先创建如下的文件: 其中 build用于cmake编译,防止大量编译的中间文件污染代码文件夹具体可见cmake 构建工具…

手机端宝贝描述中每张图片的宽要在480到1500之间,最大高度为2500, 以下图片不满足

上图是近期小编与一位店主的聊天截图,从截图中我们可以知道,这位店主在使用复制软件来复制宝贝上传时出现了一些问题,下面,小编将上传出现的错误、分析过程及解决方法列示如下,希望能给其他店主一些帮助:查…

批量图片压缩怎么做?分享三招图片压缩怎么操作的方法

因为工作需要在电脑上保存大量图片的小伙伴们,是不是图片一下子把电脑内存占满了,可是要怎么做才能减少图片的占用空间呢?我们可以把图片压缩,这样子就可以保存更多的图片啦。还不清楚批量图片压缩怎么做的小伙伴们,让…

光点数据中台,解决高校信息整合难题_光点科技

目前,国家和相关部门对教育信息化高度重视,先后出台了多项政策和文件,要求加快教育信息化的发展步伐,高校信息化进入了快速发展期。 在此背景下,数据也将会成为高校信息化的核心资产,并对高校信息化的快速发…

【Big Data】解决Hive查询出现Java.lang.OutMemoryError.java heap space

一、Introduction 在使用Hive时,出现了以下的问题 错误的原因是资源分配不够,但是错误的原因有很多,需要去查看日志文件观察具体的错误。 日志文件位置在 /tmp/root/hive.log 由此我们知道具体的错误原因是JVM资源分配不够 接下来可以尝试…

PE格式:手写PE结构解析工具

PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等,在PE文件中我们最需要关注,PE结构,导入表,…

Tech Lead如何组建你的全明星团队

当你成为 Tech lead,意味着你不再只是团队中的普通一员。现在你是开发团队的Leader,换句话讲,这是一支你的团队。你需要费尽心思组建和打造你的团队! 组建搭配合理的团队 (图片来自于 pixabay) 作为Tech Lead,你要先…

Jmeter,将响应结果保存至csv文件,并读取csv文件

在做性能测试的时候,需要模拟多个不同的用户同时进行操作,此时可以将响应数据中的某些字段(比如token字段)提取出来,以供下一接口作为入参。 一、将响应结果中的字段提取,并保存至CSV文件【分为2个步骤】 …

Redis管理客户端,兼容Windows、Mac、Linux

真正的大师,永远都怀着一颗学徒的心! 一、项目简介 Redis管理客户端,兼容Windows、Mac、Linux 二、实现功能 支持自定义文本视图 支持哨兵支持 Hash List Set Zset搜索支持 支持自动更新 支持SSH 通道支持 支持精确搜索 单链接支持 支持Redis&g…

外观(门面)模式

思考外观模式 正常完成一个功能需要调很多个接口,外观模式就是组装这些接口为一个接口,对外提供这一个接口,用户调用这一个接口就能完成原来多个接口才能完成的功能,简化调用 1.外观模式的本质 外观模式的本质是:封装交…

用户管理系统(1)

1)用户管理项目:基本功能介绍 1)登录功能:只能是超级管理员管理员登录,普通用户无法进行登录 2)用户的列表页面:普通用户的列表页和超级管理员的列表页 3)条件查询:组合条件查询,不定规则的查询,指定名称,指定籍贯,指定…