一.字符编码和字符集
1.字符编码
编码:字符(看的懂的)-->字节(看不懂的)
解码:字节(字节(看不懂的))-->字符(看的懂的)
字符编码:一套自然语言的字符和二进制数之间对应的规则
编码表:生活中的文字和计算机中二进制的对应规则
2.字符集
1)ASCII字符集:基于拉丁字母的一套电脑编码:8bits代表一个字符,共256个字符,用于显示现代英语
2)ISO-8859-1字符集::拉丁码表,用于显示欧洲使用的语言
3)GBxxx字符集:用于显示中文:GB2312(2个字节代表1个中文),GBK,GB18030
4)Unicode字符集:统一码,用于显示任意语言:UTF-8(3个字节代表1个中文),UTF-16,UTF-32
二.OutputStreamWriter
1.概念
java.io.OutputStreamWriter extends Writer
OutputStreamWriter:是字符流通向字节流的桥梁;使用指定的字符集将写入其中的字符编码为字节
2.构造方法
OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)创建一个使用命名字符集的OutputStreamWriter。
参数:
OutputStream out:字节输出流
String charsetName:指定的编码表名称,不区分大小写:utf-8,gbk,,默认使用utf-8
3.实现步骤
//1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定编码表名称
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("G:\\a.txt"), "utf-8");
//2.使用OutputStreamWriter对象的方法writer,把字符转换为字节存储到缓冲区中(编码)
osw.write("你好");
//3. 使用OutputStreamWriter对象中的方法flush,把内存中缓冲区中的字节刷新到文件中(使用字节流写字节的过程)
osw.flush();
//4.释放资源
osw.close();
三.InputStreamReader
1.概念
java.io.InputStreamReader extend Reader
InputStreamReader:是从字节流到字符流的桥;它读取字节,并使用指定的charset将其解码为字符 。
2.构造方法
InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, String charsetName)创建一个使用命名字符集的InputStreamReader。
3.实现步骤
//1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
InputStreamReader isr = new InputStreamReader(new FileInputStream("G:\\a.txt"), "utf-8");
//2.使用InputStreamReader对象中的方法read读取文件
int len = 0;
while ((len = isr.read()) != -1) {
System.out.println((char) len);
}
//3.释放资源
isr.close();