java 字符和字节的关系

losetowin 发布于:2014-11-2 21:38 分类:Java  有 2385 人浏览,获得评论 29 条 标签: java字节 java字符 

本文地址:http://www.dutycode.com/java_zijie_zifu_bytes_len.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

问题:

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

方案:

    很简单的:

        1个字符=2个字节

        1个字节=8位

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

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

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

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

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


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

例子:

    

/**
 * 
 * 描述:Java字符和字节测试例子
 * 类名:BytesDemo.java
 * @author dutycode
 * @weibo ideaduty 
 * @email dutycode@gmail.com
 * @website http://www.dutycode.com
 * 2014-11-2
 * @version 1.0.1
 */
public class BytesDemo {

	public static void main(String[] args) {
		String e1 = "english";
		String c1 = "中文";
		
		byte[] eb1 = e1.getBytes();
		byte[] cb1 = c1.getBytes();
		
		byte[] ebUTF8 = e1.getBytes(Charset.forName("utf8")); 
		byte[] cbUTF8 = c1.getBytes(Charset.forName("utf8")); 
		
		byte[] ebGbk = e1.getBytes(Charset.forName("gbk")); 
		byte[] cbGbk = c1.getBytes(Charset.forName("gbk")); 
		
		System.out.println("英文字符:" + eb1.length);
		System.out.println("中文字符,默认(UTF8):" + cb1.length);
		System.out.println("英文字符,(UTF8):" + ebUTF8.length);
		System.out.println("中文字符,(UTF8):" + cbUTF8.length);
		System.out.println("英文字符,(GBK):" + ebGbk.length);
		System.out.println("中文字符,(GBK):" + cbGbk.length);
	}
}
运行结果:


    QQ截图20141102214818.png

    

参考文章

    http://www.cnblogs.com/o-andy-o/archive/2012/04/11/2441940.html

版权所有:《攀爬蜗牛》 => 《java 字符和字节的关系
本文地址:https://www.dutycode.com/java_zijie_zifu_bytes_len.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。