字节(byte)与位(bit)基础回顾
预估方式:一个uid,String类型,最长约50字节,即50Byte,一天100亿PV,则100亿*50Byte,约500G容量存ES中或Hbase中,无法存日志文件中,一个docker磁盘才50G
字节 byte
位 bit
bit : 电脑记忆体中最小的单位,在二进位电脑系统中,每一bit 可以代表0 或 1 的数位讯号。
Byte : 一个Byte由8 bits所组成,可代表一个字元(A~Z)、数字(0~9)、或符号(,.?!%&+-*/),是记忆体储存资料的基本单位,至於每个中文字则须要两Bytes。当记忆体容量过大时,位元组这个单位就不够用,因此就有千位元组的单位KB出现。
1 Byte = 8 Bits
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
bps : bits per second的简称。一般数据机及网络通讯的传输速率都是以「bps」为单位。如56Kbps、100.0Mbps 等等。
Bps:Byte per second的简称。而电脑一般都以Bps 显示速度,如1Mbps 大约等同 128 KBps。
mbps=mega bits per second(兆位/秒)是速率单位,所以正确的说法应该是说usb2.0的传输速度是480兆位/秒,即480mbps。
mb=mega bytes(兆比、兆字节)是量单位,1mb/s(兆字节/秒)=8mbps(兆位/秒)。
usb2.0标准接口传输速率。许多人都将“480mbps”误解为480兆/秒。其实,这是错误的,事实上“480mbps”应为“480兆比特/秒”或“480兆位/秒”,它等于“60兆字节/秒”。此外usb2.0 480mbps=60mb/s的传输速率还只是理论值,它还要受到系统环境的制约(cpu、硬盘和内存等),其实际读、取写入硬盘的速度约在11~16mb/s。但这也比usb1.1的12mbps(1.5m/s)快了近10倍。
我们所说的硬盘容量是40gb、80gb、100gb,这里的b指是的byte也就是“字节”。
1 kb = 1024 bytes =2^10 bytes
1 mb = 1024 kb = 2^20 bytes
1 gb = 1024 mb = 2^30 bytes
比如以前所谓的56kb的modem换算过来56kbps除以8也就是7kbyte,所以真正从网上下载文件存在硬盘上的速度也就是每秒7kbyte。
与传输速度有关的b一般指的是bit。
与容量有关的b一般指的是byte。
在移动开发中由于移动设备内存的局限性,往往需要考虑使用的数据类型所占用的字节数。下面简单介绍下Java中几种基本数据类型,以加深记忆。
在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。
1.整型
类型 存储需求 bit数 取值范围
int 4字节 4*8
short 2字节 2*8 -32768~32767
long 8字节 8*8
byte 1字节 1*8 -128~127
2.浮点型
类型 存储需求 bit数 取值范围
float 4字节 4*8
double 8字节 8*8
3.char类型
类型 存储需求 bit数 取值范围
char 2字节 2*8
4.boolean类型
类型 存储需求 bit数 取值范围
boolean 1字节 1*8 false、true
Java中String类型字节不固定,String越长字节越多。
一个汉字占几个字节(详解与原理):
不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的,可能是2个、3个、4个字节;
附:一般认为一个汉字=2个英文字母=2字节
GBK编码,一个汉字占两个字节。
UTF-16编码,通常汉字占两个字节,CJKV扩展B区、扩展C区、扩展D区中的汉字占四个字节(一般字符的Unicode范围是U+0000至U+FFFF,而这些扩展部分的范围大于U+20000,因而要用两个UTF-16)。
UTF-8编码是变长编码,通常汉字占三个字节,扩展B区以后的汉字占四个字节。
@Test
public void test1() throws UnsupportedEncodingException {
String a = "名";
System.out.println("UTF-8编码长度:"+a.getBytes("UTF-8").length);
System.out.println("GBK编码长度:"+a.getBytes("GBK").length);
System.out.println("GB2312编码长度:"+a.getBytes("GB2312").length);
System.out.println("==========================================");
String c = "0x20001";
System.out.println("UTF-8编码长度:"+c.getBytes("UTF-8").length);
System.out.println("GBK编码长度:"+c.getBytes("GBK").length);
System.out.println("GB2312编码长度:"+c.getBytes("GB2312").length);
System.out.println("==========================================");
char[] arr = Character.toChars(0x20001);
String s = new String(arr);
System.out.println("char array length:" + arr.length);
System.out.println("content:| " + s + " |");
System.out.println("String length:" + s.length());
System.out.println("UTF-8编码长度:"+s.getBytes("UTF-8").length);
System.out.println("GBK编码长度:"+s.getBytes("GBK").length);
System.out.println("GB2312编码长度:"+s.getBytes("GB2312").length);
System.out.println("==========================================");
}
UTF-8编码长度:3
GBK编码长度:2
GB2312编码长度:2
==========================================
UTF-8编码长度:4
GBK编码长度:1
GB2312编码长度:1
==========================================
char array length:2
content:| 𠀁 |
String length:2
UTF-8编码长度:4
GBK编码长度:1
GB2312编码长度:1
==========================================