欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中byte与汉字的关系

程序员文章站 2022-07-15 13:22:32
...

字节是二进制数据的单位。一个字节通常8位长。但是,一些老型号计算机结构使用不同的长度。为了避免混乱,在大多数国际文献中,使用词代替byte。在多数的计算机系统中,一个字节是一个8位长的数据单位,大多数的计算机用一个字节表示一个字符、数字或其他字符。一个字节也可以表示一系列二进制位。在一些计算机系统中,4 个字节代表一个字,这是计算机在执行指令时能够有效处理数据的单位。一些语言描述需要2个字节表示一个字符,这叫做双字节字符集。一些处理器能够处理双字节或单字节指令。字节通常简写为“B”,而位通常简写为小写“b”,计算机存储器的大小通常用字节来表示

字节数组是由一系列字节组成。

提到汉字我们就会想起编码,常用的编码有GBKUTF8两种,两者的区别如下:

GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。

UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码。

UTF8编码格式很强大,支持所有国家的语言,正是因为它的强大,才会导致它占用的空间大小要比GBK大,对于网站打开速度而言,也是有一定影响的。GBK编码格式,它的功能少,仅限于中文字符,当然它所占用的空间大小会随着它的功能而减少,打开网页的速度比较快。

下面我来做实验,先看如下代码:

public static void main(String[] args)  {
	String str = "人";
	byte[] bs = str.getBytes();
	for(int i=0;i<bs.length;i++) {
		System.out.println(bs[i]);
	}
}

输出结果如下:

-28
-70
-70

这个时候很多人看到这个结果就不淡定了,为什么会是这样的结果,不是说一个汉字占用2个字节吗,怎么成了三个了,不用着急,听我慢慢道来:

首先我们先来看看我系统的编码是什么?

System.out.println(Charset.defaultCharset());

通过Charset类的方法可以获取到你当前的项目环境编码,我的电脑是UTF8。这个时候回到上面的问题上,为什么是3个,下面我们在来看一段代码:

public static void main(String[] args) throws UnsupportedEncodingException {
	String str = "人";
	//使用UTF-8编码
	byte[] bs = str.getBytes("UTF-8"); 
	for (int i = 0; i < bs.length; i++) {
		System.out.println(bs[i]);
	}
	
	System.out.println("==================");
	//使用GBK编码
	byte[] bss = str.getBytes("GBK");
	for (int i = 0; i < bss.length; i++) {
		System.out.println(bss[i]);
	}
}

输出的结果如下:

-28
-70
-70
==================
-56
-53

可以看到,GBK编码确实比UTF-8少了一个字节。

Java中byte与汉字的关系

有图有真相,不骗你。

主要原因就是UTF-8本身包含的内容要比GBK多,所以在存储的时候自然而然的多出了一个字节,虽然说GBK少,但是在大家做项目的时候还是建议使用UTF-8。

下面在来看一段有意思的代码:

public static void main(String[] args) throws UnsupportedEncodingException {
	
	byte[] b = new byte[2];
	b[0] = -56;
	b[1] = -53;
	System.out.println(new String(b,"GBK"));
	
}

结果如下:

通过反向也是可以转回去的,有兴趣的伙伴们可以试试喽。

有问题可以在下面评论,技术问题可以私信我。