首页 > 代码库 > java 字符和字节的关系

java 字符和字节的关系

问题:

    Java中中英文分别占几个字节?如果数据量很大,或者存储空间不足的时候,可能需要考虑字节的占用大小,用于估计使用机器的数量。

方案:

    很简单的:

        1个字符=2个字节

        1个字节=8位

    1个英文字符占一个字节,也就是0.5个字符

    1个中文字符占2-4个字节,这个需要区分编码情况,具体如下:

        UTF8编码下: 1个中文字符占3个字节(少数占4个字节)

        GBK编码下:  1个中文字符占2个字节

        UTF16编码下:1个中文字符占2个字节,Unicode扩展区的一些汉字存储需要4个字节


上面其实不好记,最好的方法是放到程序里面去实际运行一下看看。

例子:

    

01/**
02 *
03 * 描述:Java字符和字节测试例子
04 * 类名:BytesDemo.java
05 * @author dutycode
06 * @weibo ideaduty
07 * @email dutycode@gmail.com
08 * @website http://www.dutycode.com
09 * 2014-11-2
10 * @version 1.0.1
11 */
12public class BytesDemo {
13 
14    public static void main(String[] args) {
15        String e1 = "english";
16        String c1 = "中文";
17         
18        byte[] eb1 = e1.getBytes();
19        byte[] cb1 = c1.getBytes();
20         
21        byte[] ebUTF8 = e1.getBytes(Charset.forName("utf8"));
22        byte[] cbUTF8 = c1.getBytes(Charset.forName("utf8"));
23         
24        byte[] ebGbk = e1.getBytes(Charset.forName("gbk"));
25        byte[] cbGbk = c1.getBytes(Charset.forName("gbk"));
26         
27        System.out.println("英文字符:" + eb1.length);
28        System.out.println("中文字符,默认(UTF8):" + cb1.length);
29        System.out.println("英文字符,(UTF8):" + ebUTF8.length);
30        System.out.println("中文字符,(UTF8):" + cbUTF8.length);
31        System.out.println("英文字符,(GBK):" + ebGbk.length);
32        System.out.println("中文字符,(GBK):" + cbGbk.length);
33    }
34}
运行结果:


    QQ截图20141102214818.png

    

java 字符和字节的关系