平常工作少用char和byte 但IO流操作必会涉及,回顾两者
在正常工作中使用char和字节的场景不多,但是如果项目中使用IO流动操作,则将涉及这两种类型。让我们一起回顾一下这两种类型。

char和字节的比较
字节
字节字节,数据存储容量1 Byte,字节也是存储范围作为基本数据类型的概念。它不同于特殊数字存款(例如INT和Long)的类型。这种类型的大小为1byte,int为4Byte。
如果保存数字,则为1byte = 8位,2^8 = 256为-128-127。字符包括字母和汉字,字母是1 Byte,一个汉字2 Byte。也就是说,您可以使用字节变量来存储英语角色,但是没有中文角色,因为中文角色占2字节。
总之,字节是Java中的基本数据类型。该数据类型的长度为1 Byte。该字节是另一个字节,即,基本数据类型也是存储空间的基本测量单元。
char
char是Java中保留的单词。与其他语言不同,Char在Java中为16,因为Java使用Unicode。但是,从0〜127起,Unicode中包含8位ASCII代码。
在Java中使用Unicode的原因是Java的小程序允许它在世界各地运行,并且需要一个可以表达所有人类语言的字符代码。 Unicode。
char本质上是一个占两个字节的非符号阳性整数。该正整数对应于Unicode编号,以指示与Unicode编号相对应的字符。由于固定的两个字节职业,因此char只能表示65536范围内具有Unicode编号的字符,而无需指示字符以外的字符。
Unicode和UTF-8的比较
Unicode
应该注意的是,Unicode只是一个符号。它仅指定符号的二进制代码,但未指定应如何存储二进制代码。例如,汉字的“严格” Unicode是4E25,它转换为二进制数(100111000100101),这意味着此符号至少表示2个字节。指示其他更大的符号,可能需要3或4个字节,甚至需要更多字节。这里有两个严重的问题。第一个问题是如何区分Unicode和ASCII?计算机如何知道三个字节代表一个符号,而不是分别代表三个符号?第二个问题是,我们已经知道只有一个字节在英文字母中表达。如果Unicode统一规定,每个符号由三个或四个字节表示,则必须有两个英文字母。由三个字节为0,这是存储的大浪费。文本文件的大小将比不可接受的两次或三倍。它们引起的结果是:1)出现了多种Unicode存储方法,也就是说,有许多不同的二进制格式可用于表示Unicode。 2)直到互联网出现之前,不能长时间提升Unicode。
UTF-8
互联网的普及需要一种统一的编码方法。 UTF-8是Internet上使用最广泛的Unicode实现方法。其他实现方法还包括UTF-16(以两个字节或四个字节为特征)和UTF-32(以四个字节为特征),但基本上不在Internet上使用。重复,这里的关系是UTF-8是Unicode的实现方法之一。以UTF8为例,UTF8是长长的编码标准。它可以代表一个字符1〜4字节,而中文则为3个字节,ASCII字符为1个字节。为什么我们可以在Java中使用char代表中国人?因为Java使用Unicode作为编码方法。 Unicode是固定的长度编码标准。每个字符是2个字节,这是空间类型的空间。编译时,将UTF8的汉字转换为传输操作的相应Unicode。示例代码
package com.lingyejun.io;
import java.io.UnsupportedEncodingException;
/**
* Created by Lingye on 2018/9/28 14:34
*/
public class ChineseCharCode {
public static void main(String[] args) {
String str = "中";
char c = '中';
// java使用unicode编码,一个字符占两个字节
System.out.println("char字符 中 二进制"+Integer.toBinaryString(c));
try {
// UTF-8是Unicode的实现方式之一
System.out.println(str.getBytes("UTF-8").length);
// UTF-16也是Unicode的实现方式之一,但使用较少
System.out.println(str.getBytes("UTF-16").length);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
输出结果和摘要