打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
netty源码:先从字节和字符开始

前面我们说过学习netty先学基础,本篇讨论基础中的基础:字节和字符。

面试的时候有没有被问到什么是字节,什么是字符,字节和字符有什么区别?本篇就这个问题作一篇能够让你彻底了解字节字符的总结。

字节

字节byte是计算机底层存储和传输的基本单位。

我们知道计算机是二进制的,计算机只认识0和1,所有的东西到了计算机的形式只能是0和1,计算机中的0和1各占一个bit位,一个字节占8个bit位,也就是一字节包含8个0或1.

字节在计算机中作为存储单位和传输单位,而在java语言中还代表着占用1字节的基本数据类型byte.

字符

所谓一切皆字符,可以这样理解,我们能够在一张纸上面画出来的任何图形,图案,文字等等都是字符,字符可以说是无穷无尽的,有一些是无关紧要的,有一些是我们生活学习中必须具备的,比如比较常见的字符:汉字,算数符号,英文字母,各国语言,甚至甲骨文等等。

编码

我们处在互联网时代,如何使这些字符能够在计算机上表示呢,这就需要一套编码策略来实现。

我们知道一个字节8个bit位,他可以表示的数字是-127到128,也就是256个数字,这256个数字就是256种bit位的组合形态,如果用这256个组合形态表示字符的话,最多也只能表示256个字符,那是远远不够的,所以不难想到既然一个字节不够,那就多个字节组合出更加丰富的bit位形态,就可以表示成更多的字符,而这种利用字节中bit位组合来唯一表示某个字符的方式就是编码格式。

常见的编码格式

说到编码格式我们可能一下子想到ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16这些,我们分别说一下吧

ASCII编码是最原始的编码格式,标准的ASCII码一共有128个,占用字节的低7位,可以覆盖全部的英语系的符号,但是也仅此而已,还有太多的字符没能覆盖到。

ISO-8859-1编码是ASCII编码的一种扩展,它用了字节的8位,能表示256种字符,且向下兼容ASCII,包含了绝大多数的西欧符号。

GB2312是双字节编码,意味着它使用两个字节来表示符号,包含有6763个汉字。

GBK是GB2312的一个扩展,也是双字节编码,能够表示21003个汉字,且向下兼容GB2312。

时间一长,编码规范百花齐放,每个国家都有自己的编码标准,就导致自己的编码文件只能自己去解码,一时间乱七八糟,一不小心就出现乱码,这个时候就急需要一个统一的标准出现,于是国际标准化组织ISO制定了一个能够容纳世界上所有文字和符号的字符编码方案Unicode。

Unicode是一个字符集,它规定了人类所有字符对应的二进制数,至于这个二进制数怎么存储则是由开发者来进行实现。其中比较流行的实现是UTF-8和UTF-16,还有一种UTF-32。

UTF-32编码使用4个字节,也就是32位二进制存储Unicode字符,效率高但是空间浪费。

UTF-8编码是一种变长的编码方式,它使用1~6个字节来存储,对于英语系的字符使用一个字节,向下兼容ASCII,对于汉字则使用两个字节,依次类推,这样就能够节省一定的空间。

UTF-16编码是介于两者之间的一种编码方式。对于部分字符采用2个字节,另一部分字符采用4个字节。因此UTF-16无法兼容ASCII。

在平时的使用中,UTF-8的使用还是比较多,就是由于它既能向下兼容ASCII,还能够在一定程度上节省空间。

在开发中,从磁盘或者网卡读取数据到内存,或者把内存中的数据写入磁盘或者网卡,这个过程其实就伴随着字节和字符的转换。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Rust : utf8与unicode码
ANSI、ASCII、Unicode和UTF
计算机世界的字符编码扫盲
python read_csv遇到的encoding字符编码问题总结
浅谈unicode编码和utf-8编码的关系
聊一聊Python2的编码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服