比特抢呆、字節(jié)、KB的關(guān)系
比特(bit)
- 存放一位二進(jìn)制數(shù)笛谦,即 0 或 1抱虐,最小的存儲(chǔ)單位
字節(jié) (byte)
- 1byte = 8bit
- 8個(gè)二進(jìn)制位(bit)為一個(gè)字節(jié)(b),最常用的單位饥脑。 (常說(shuō)的一個(gè)字節(jié)占8位)
- 一個(gè)英文字母(不分大小寫(xiě))占1個(gè)字節(jié)的空間恳邀,一個(gè)中文漢字占3-4個(gè)字節(jié)的空間
- 英文標(biāo)點(diǎn)占1個(gè)字節(jié),中文標(biāo)點(diǎn)占2個(gè)字節(jié)
byte KB MB GB 換算關(guān)系
- 1 KB = 2 ^ 10 byte = 1024 byte ≈ 10 ^ 3 byte
- 1 MB = 2 ^ 20 byte ≈ 10 ^ 6 byte
- 1 GB = 2 ^ 30 byte ≈ 10 ^ 9 byte
- 1 TB = 1024G
- 1 億 = 10 ^ 8
小技巧
數(shù)據(jù)量估算:1 個(gè)整數(shù)占 4 byte灶轰,1 億個(gè)整數(shù)占 4 * 10 ^ 8 byte ≈ 400 MB
幫助記憶:1K ≈ 一千個(gè)字節(jié) 1M ≈ 一百萬(wàn)個(gè)字節(jié) 1G ≈ 十億個(gè)字節(jié)
字節(jié)和字符的關(guān)系
字符
- a谣沸、A、中笋颤、+乳附、*、の......均表示一個(gè)字符椰弊;
- 一般 utf-8 編碼下许溅,一個(gè)漢字 字符 占用 3 個(gè) 字節(jié);
- 一般 gbk 編碼下秉版,一個(gè)漢字 字符 占用 2 個(gè) 字節(jié)贤重;
字符集
- ASCII碼中,一個(gè)英文字母(不分大小寫(xiě))占一個(gè)字節(jié)的空間清焕,一個(gè)中文漢字占兩個(gè)字節(jié)的空間
- GB 2312 編碼或 GBK 編碼中并蝗,一個(gè)英文字母字符存儲(chǔ)需要1個(gè)字節(jié),一個(gè)漢字字符存儲(chǔ)需要2個(gè)字節(jié)
- UTF-8編碼中秸妥,一個(gè)英文字符等于一個(gè)字節(jié)滚停,一個(gè)中文(含繁體)等于三個(gè)字節(jié)
- Unicode編碼中,一個(gè)英文等于兩個(gè)字節(jié)粥惧,一個(gè)中文(含繁體)等于兩個(gè)字節(jié)
- UTF-16編碼中键畴,一個(gè)英文字母字符或一個(gè)漢字字符存儲(chǔ)都需要2個(gè)字節(jié)(Unicode擴(kuò)展區(qū)的一些漢字存儲(chǔ)需要4個(gè)字節(jié))
- UTF-32編碼中,世界上任何字符的存儲(chǔ)都需要4個(gè)字節(jié)
UTF-8編碼下突雪,按一個(gè)中文字符3個(gè)字節(jié)算起惕,1KB 大小的存儲(chǔ)空間 = 1024英文字符 = 341中文字符
Java 中的字節(jié)長(zhǎng)度計(jì)算
Java中的一個(gè)char是2個(gè)字節(jié)。Java采用unicode咏删,2個(gè)字節(jié)來(lái)表示一個(gè)字符惹想,這點(diǎn)與C語(yǔ)言中不同,C語(yǔ)言中采用ASCII督函,在大多數(shù)系統(tǒng)中嘀粱,一個(gè)char通常占1個(gè)字節(jié)激挪,但是在0~127整數(shù)之間的字符映射,unicode向下兼容ASCII锋叨。而Java采用unicode來(lái)表示字符垄分,一個(gè)中文或英文字符的unicode編碼都占2個(gè)字節(jié),但如果采用其他編碼方式娃磺,一個(gè)字符占用的字節(jié)數(shù)則各不相同锋喜。
public class CharTest {
public static void main(String[] args){
String str = "你好Java";
int byte_len = str.getBytes().length;
int len = str.length();
System.out.println("字節(jié)長(zhǎng)度為:" + byte_len);
System.out.println("字符長(zhǎng)度為:" + len);
System.out.println("系統(tǒng)默認(rèn)編碼方式:" + System.getProperty("file.encoding"));
}
}
輸出結(jié)果
字節(jié)長(zhǎng)度為:11
字符長(zhǎng)度為:7
系統(tǒng)默認(rèn)編碼方式:UTF-8
我的系統(tǒng)的默認(rèn)編碼方式為UTF-8,因此對(duì)于字符串 “你好Java”豌鸡,如果調(diào)用length()方法返回其長(zhǎng)度,得到的結(jié)果將為:7段标。該方法返回的是字符串的字符數(shù)涯冠,無(wú)論是中文字符還是英文字符,都被看做是一個(gè)字符逼庞。
如果將其轉(zhuǎn)換為byte數(shù)組蛇更,而后返回byte數(shù)組的長(zhǎng)度,得到的結(jié)果將為:11赛糟。因?yàn)樵赨TF-8編碼中派任,中文占3個(gè)字節(jié),而英文字符占1個(gè)字節(jié)璧南。