开发中遇到的编码问题(转)

在工作中遇到一些概念模糊的地方, 需要记住了
bit意为“位”或“比特”,是计算机运算的基础;
byte意为“字节”,是计算机文件大小的基本计算单位;

说到usb2.0标准接口传输速率。许多人都将“480mbps”误解为480兆/秒。其实,这是错误的,事实上“480mbps”应为“480兆比特/秒”或“480兆位/秒”,它等于“60兆字节/秒”,大家看到差距了吧。

这要从bit和byte说起:bit和byte同译为"比特",都是数据量度单位,bit=“比特”或“位”。
byte=字节即1byte=8bits,两者换算是1:8的关系。
mbps=mega bits per second(兆位/秒)是速率单位,所以正确的说法应该是说usb2.0的传输速度是480兆位/秒,即480mbps。
mb=mega bytes(兆比、兆字节)是量单位,1mb/s(兆字节/秒)=8mbps(兆位/秒)。

我们所说的硬盘容量是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

最后再说一点: usb2.0 480mbps=60mb/s的传输速率还只是理论值,它还要受到系统环境的制约(cpu、硬盘和内存等),其实际读、取写入硬盘的速度约在11~16mb/s。但这也比usb1.1的12mbps(1.5m/s)快了近10倍。


1、说到编码,最大的问题就是乱码了,为啥会有乱码呢 ?

因为字符在编码和解码的时候,用的编码字典不一致,从而导致了乱码,常见的编码有ASCII、GBK、GB2312、UTF-8、UTF-16等。

2、为啥需要编码呢?

因为计算机的存储是二进制的,也就是01010这种形式的,这样一些中文、法文、俄文等,就需要编码解码才可以达到效果。

3、java中数据类型的转换是啥?

bit(位)、byte(字节)、char(字符)

1byte == 8bit      一位二进制称为一个bit,一个byte的取值范围是-128~127

1char == 2byte   char是字符类型,取值范围是0~65535

1char == 16bit    一个char是16个二进制位

1字母 == 1byte == 8bit

1汉字 == 2byte == 16bit

char可以表示中文,但是byte不可以;

char可以表示一个整数,不可以表示负数,byte可以表示-128到127的数值;

char、byte、int对于英文字符,可以相互转换;

1Kb == 1024bit   1KB ==1024byte ==1024*8bit

4、java和unicode的关系?

Unicode包含两个概念,一个是字符集,一个是编码方式,utf-8是Unicode的其中一种编码方式。

JVM默认编码是GBK,也就是底层编码环境是GBK编码。String是Unicode的,当读取外部的数据,如果没有指定的解码方式,它会根据JVM默认编码来解码外部数据,即从JVM默认编码来解码外部数据。当然也可以指定需要的解码方式。

Unicode将世界所有的符号纳入其中,每一个符号分配一个独一无二的编码,是一个很大的集合,可以容纳100多万个字符

5、使用不同的编码解码方式,可以负负得正吗?

当然不行,因为在编码解码的过程中,如果没有对应的字典,可能出现丢失数据的情况,这样就没有办法负负得正了。

http://iamzhongyong.iteye.com/blog/2070106

原文地址:https://www.cnblogs.com/softidea/p/4336039.html