1 JAVA 类,对象,成员
类:对象的模板
对象:类的实例
成员:属性和方法的集合 — 成员变量,成员函数
2 位(b),字节(B),字符,编码方式
位(bit):也叫 比特位
,是计算机最小的存储单位。以 0 或 1 来表示比特位的值。越多的 比特位数,可以表现越复杂的图像信息。
1字位(bit) = 1个二进制数
一个计算机的 0 1 0 1 0 1 ,占一个 bit
字节(Byte):一种计量单位,表示 数据量多少
,它是计算机用于计量 存储容量
的 一种计量单位
字节是一个8位的二进制数,是一个很具体的存储空间
1个字节,就是 8个 bit
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
计算机只知道字节,字符是语义上的单位,一个字符占几个字节,根据编码规则的不同而不同
在 IO流中的应用
IO流 分为 字节流(InputStream, OutputStream
) 字符流(Reader, Writer
)
字节流就是 计算机把所有东西都看成 二进制字节来处理,字符流则根据不同的编码规则,进行不同的转换
字符:指 计算机中使用的 文字
和 符号
,比如 1,2,3,A,B,C,~,!,>,& 等等
一个字符占几个字节,根据编码方式的不同而不同
下面介绍一下 常用编码方式的特点
ANSI
:标点符号,数字,大小写字母都占 1个字节,汉字占 2个字节
UNICODE
:所有的字符都占 2个字节
UTF-8
: 一个英文字符等于一个字节,一个中文(含繁体)占 3个字节
UTF-16
: 一个英文字母字符或者一个汉字字符存储都需要 2个字节(Unicode扩展区的一些汉字存储需要 4个字节)
UTF-32
: 世界上任何字符的存储都需要 4个字节
Java中,字符仅以一种形式存在,那就是 Unicode
。由于 Java 采用 unicode编码,char 在 Java中占 2个字节。2个字节(16位)来表示一个字符。
这里的 Java中,是指在 JVM中,在内存中,在代码里声明的每一个 char, String 类型的变量中
编码方式:为什么会产生编码方式
计算机只能识别 0,1,但是人类的语言有很多种,怎么让计算机能够识别并显示这些语言,产生了编码方式。编码方式就是一种规则,用于人类语言和计算机语言0,1的转换
ASCII 码
总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来
ISO-8859-1
128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符
GB2312
全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字
GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码
GB18030
全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛
UTF-16
说到 UTF 必须要提到 Unicode(Universal Code 统一码),ISO 试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂,关于 Unicode 的详细规范可以参考相应文档。Unicode 是 Java 和 XML 的基础,下面详细介绍 Unicode 在计算机中的存储形式
UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因
UTF-8
UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。而 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。
UTF-8 有以下编码规则:
如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。
如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节