这不光是 Java 的概念,我们知道机器只知道字节,而字符却是语义上的单位,它是有编码的,一个字符可能编码成1个2个甚至3个4个字节。这跟字符集编码有关系,英文字母和数字是单字节,但汉字这些自然语言中的字符是多字节的。一个字节只能表示255个字符,不可能用于全球那么多种自然语言的处理,因此肯定需要多字节的存储方式。
当我们在处理 Java 时,比如 InputStream, OutputStream 它们是处理字节流的,就是说假设所有东西都是二进制的字节,而 Reader, Writer 则是字符流,它涉及到字符集的问题,因为把一个字符保存到磁盘或读取出来需要指定一个字符集,平时你的代码没有指定是因为 JVM 读取操作系统默认的字符集,有时候(特别是数据交换的时候)可能这个默认字符集不正确。
在 Java 中,它的内核是使用 Unicode,也就是说它记住了每个字符的 Unicode 内部编码(一串数字,全球唯一,各国语言常用字符全部在里面,比如康熙字典这种古董中的多数汉字都在其中),只有把字符串通过网络发送出去或保存到磁盘上或反过来读取时才有字符编码成字节的过程,因为一个字符多个字节我们需要知道每个字符的这几个字节是按什么顺序排列的,第1个字节排前面还是排后面,多个字符串在一起时在读取时怎么识别出哪几个字节凑在一起是一个字符,这就是字符集编码方案了,UTF8, GBK, GB2312, GB18030, BIG5,之类的都是其中一种字符集编码方案。
温馨提示:内容为网友见解,仅供参考