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 [email protected]
08  *
@website http://www.dutycode.com
09  *
2014-11-2
10  *
@version 1.0.1
11  */
12 public 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 }

运行结果:

时间: 2024-11-10 01:22:57

java 字符和字节的关系的相关文章

java字符、字节、位

1字符=2字节: 1字节=8位 b:位 B:字节 英文和数字占一个字节中文占一个字符,也就是两个字节 1k=2^101kb=1024 位1kB=1024 字节

java String长度与varchar长度匹配理解(字符和字节长度理解)

string中的length()长度,返回的是char的数量,每个char可以存储世界上任何类型的文字和字符,一个char 而Oracle库中的指定varchar,指的是字节长度.不是字符.字符和字节之间还有编码格式的转换嘞,对应具体一个字符用多少字节编码问题. 而Oracle库中的指定varchar,指的是字节长度.不是字符.字符和字节之间还有编码格式的转换嘞,对应具体一个字符用多少字节编码问题. 而Oracle库中的指定varchar,指的是字节长度.不是字符.字符和字节之间还有编码格式的转

Java中的字节和字符

最近在看Java中的IO相关知识,发现对字节和字符的理解还不够.写篇总结记录一下. 一.字节 所谓字节(Byte),是计算机数据存储的一种计量单位.一个二进制位称为比特(bit),8个比特组成一个字节,也就是说一个字节可以用于区分256个整数(0~255).由此我们可以知道,字节本是面向计算机数据存储及传输的基本单位,后续的字符也就是以字节为单位存储的,不同编码的字符占用的字节数不同. 那么在Java中,除了存储的意义外,Java还将字节Byte作为一种基本数据类型,该数据类型在内存中占用一个字

java中的字符与字节

经常听大家谈论"java使用的是Unicode编码",真不知道他们是真知道,还人云亦云 ! 首先说一下,java中class文件中使用的是utf-8编码,而在jvm运行时使用的是utf-16(如char). 一.字节的形式写.读取文件 // 以字节流的形式写出 FileOutputStream out = new FileOutputStream("text.txt"); out.write("IamChinese".getBytes("

Java补缺补漏—字符、字节的概念及其区别

首先我们先看一下这个问题:“Java语言中字符串“学Java”所占的内存空间是几个字节?”,要回答这个问题我们就必须先要清楚什么是“字节”什么是“字符”. 字节(Byte):字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位.字节是计算机信息技术用于计量存储容量和传输容量的一种计量单位,1个字节等于8位二进制,它是一 个8位的二进制数,是一个很具体的存储空间. 字符:人们使用的记号,抽象意义上的一个符号. '1', '中', 'a', '$', '¥', …… 谈到字符就不得不提ANSI及

Java IO 接口--- 字节操作 字符操作 磁盘操作 网络操作

1.IO类库的基本结构 基于字节操作的IO接口分别是InputStream和OutputStream,InputStream的类结构图如下所示: 同InputStream类似,OutputStream类也有着相同的类结构图. 关于各个子类的使用可以参考JDK 的 API 说明文档,这里我们需要注意的是:操作数据的方式是可以组合的,如下所示: InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStrea

java字符编码详解

引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国政府制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式.目前,我也不知道还有另外的简体汉字编码规范.与此对应的还有BIG5,是中华民国政府制定的,繁体汉字的编码规范,一般应用于海外计算机的繁体中文显示.所谓的繁体中文Windows,简体中文Windows,指的就是采用BIG5和

【字符编码】Java字符编码详细解答及问题探讨

一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 直接上代码进行分析似乎更有感觉.   运行结果:   说明:通过结果我们知道如下信息. 1. 在Java中,中文在用ASCII码表示为3F,实际对应符号'?',用ISO-8859-1表示为3F,实际对应符号也是为'?',这意味着中文已经超出了ASCII和ISO-8859-1的表示范围. 2. UTF

【转载】字符,字节和编码

转自:http://www.regexlab.com/zh/encoding.htm 引言 "字符与编码"是一个被经常讨论的话题.即使这样,时常出现的乱码仍然困扰着大家.虽然我们有很多的办法可以用来消除乱码,但我们并不一定理解这些办法的内在原理.而有的乱码产生的原因,实际上由于底层代码本身有问题所导致的.因此,不仅是初学者会对字符编码感到模糊,有的底层开发人员同样对字符编码缺乏准确的理解.     1. 编码问题的由来,相关概念的理解 1.1 字符与编码的发展 从计算机对多国语言的支持