- 1 byte = 8 bit
- 1 char = 2 byte = 16 bit
ascll,unicode,utf-8
在字节流传输中,传输的是一个字节,一个字节8位,则最多能表现出256种字符,则一个字节通过ASCII码表则可以查找出相应的字符
public class OrderTest1 {
@Test
public void say2() {
String fileEncoding = System.getProperty("file.encoding");
System.out.println(fileEncoding); // UTF-8
byte[] bytes = "A".getBytes();
for (byte b : bytes) {
System.out.println(b); //65
}
}
}
由上所知 utf-8编码规则下 字符转换成 字节数值 则 A--->65
System.out.println((char)65); //A
用字节数值强制转换成字符,则65--->A
ASCII码表中的字节数值范围是0-256,如果超过了256,则按照uncode编码来转换,如一般的中文就是同过unicode编码来转换的
char aaa = '中';
System.out.println((int)aaa); //20013
在uft-8编码中,存储中文时占用2-4个字节,如下'中'字符就占用了三个
则我们常见的txt编辑器notepad++,就是根据不同的编码转成字节数值,如果数值小于256就用ASCLL码值映射为对应的字符,如果大于256就用unicode来进行映射
字节流和字符流
我们采用字符流复制一个文本,流程如下:
字节流复制文本:
则在复制文本的效率方面 字节流>字符流 因为字符流需要utf-8,unicode编码转换,影响性能
字符流(字符数组)适合用在业务逻辑中需要用文本中的内容,比较或者展示,则可以用字符流
字节流(字节数组)适合用户文件的上传下载,复制备份,网络传输
图片,视频等存储并不是按照utf-8等编码存储的,所以用字符流,获取的字符由很多乱码,只能用字节流进行传输,复制备份