目录
一、前置知识
-
1. 标准ASCII字符集:
- ASCIl(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
- 标准ASCII使用1个字节存储一个字符,首位是0,总共可表示128个字符(2^7 = 128),对美国人来说完全够用。
- GBK(汉字内码扩展规范,国标) ,汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。注意:GBK兼容了ASCII字符集。
- Unicode字符集(统一码,也叫万国码)
- Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集
- UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
总结:
- ASCII字符集:只有英文、数字、符号等,占1个字节
- GBK字符集:汉字占2个字节,英文、数字占1个字节
- UTF-8字符集:汉字占3个字节,英文、数字占1个字节
- 注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码
- 注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码
2. 对字符的编码
编码有两种方式:
1. 使用默认字符集编码 ,将字符集编码后存储到字节数组中
2. 使用指定的字符集编码,将结果存储到字符集中
解码亦是如此
编码:解码:
public static void main(String[] args) throws UnsupportedEncodingException {
//编码
byte[] bytes = data.getBytes();
System.out.println(Arrays.toString(bytes));
//使用GBK编码
byte[] bytes1 = data.getBytes("GBK");
System.out.println(Arrays.toString(bytes1));
//解码 用什么编码就用什么解码,不然会有错误
String s1 = new String(bytes);
System.out.println(s1);
//使用GBK解码
String s2 = new String(bytes1,"GBK");
System.out.println(s2);
}
二、IO流概述
1. I 指Input,称为输入流:负责把数据读到内存中去
2. O 指Output,称为输出流:负责写数据出去
3. IO流的分类
第一种:按流的方向分:输入流和输出流
第二种: