字符输出流与序列化( 五 )


7.编码转换流介绍
输入/输出流体系中还提供了两个转换流, 这两个转换流用于实现将字节流转成字符流, 其中:
InputStreamReader负责将字节输入流转成字符输入流(转换时可以指定编码)OutputStreamWriter负责将字节输出流转成字符输出流(转换时可以指定编码)
思考: 为什么没有提供将字符流转成字节流?
如果现在有一个字节流:
7.1.java中常见字符 7.1.
ASCII(Code for,美国信息互换标准编码)是基于罗马字母表的一套电脑编码系统,ASCII主要用于显示现代英语和其他西欧语言,它是最基础,也是最通用的单字节编码系统 。

字符输出流与序列化

文章插图
基本的ASCII字符集共有128个字符,字符值从0到127,其中32到126是可打印字符,占 1 bytes(字节),适用于不同地区的扩充的ASCII字符集,扩充字符的编码均为高位为1的8位代码,即128-255,也称为扩展ASCII码
7.1.2.
简体中文字符集(又称为-80),兼容ASCII,占 2 bytes(字节),由于我们汉字比较复杂,又不能和ASCII编码冲突,所以,中国制定了编码,并且需要两个字节 。
所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要 。在中国大陆和新加坡获广泛使用 。收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符 。其中包括6763个汉字
7.1.3.GBK
的扩展字符集,支持繁体字,兼容,占 2 bytes(字节),由于汉字太多,太复杂,无法处理所有的汉字,这就出现GBK字符集,它扩展了编码,加入了更多的汉字
7.1.4.
国际标准组织统一标准字符集,占 2 bytes,是一种在计算机上使用的字符编码 。
是为了解决不同编码兼容性问题,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求
7.1.5.UTF-8
UTF-8是的其中一个使用方式 。(UTF是简写)
它的出现是为了提高编码的效率,根据不同符号自动选择编码的长短 。
UTF-8使用可变长度字节来储存 字符,占 1-3 bytes,
例如:
7.2.工具类
OutputStreamWriter:是字节流通向字符流的桥梁--OutputStreamWriter(OutputStream out, String charsetName)--OutputStreamWriter(OutputStream out) InputStreamReader: 是字节流通向字符流的桥梁--InputStreamReader(InputStream in)--InputStreamReader(InputStream in,String charsetName)
7.3.案例
InputStreamReader负责将字节输入流转成字符输入流(转换时可以指定编码)InputStreamReader(InputStream in) -- 创建一个 InputStreamReader 字符输入流对象, 该对象负责将 字节输入流 转成字符输入流-- 在将字节流转成字符流时, 默认使用系统默认字符集(win中, GBK)InputStreamReader(InputStream in, String charsetName)-- 创建一个 InputStreamReader 字符输入流对象, 该对象负责将 字节输入流 转成字符输入流-- 在将字节流转成字符流时, 将会使用charsetName指定的字符集
下面以获取键盘输入为例来介绍转换流的用法 。
Java使用.in代表标准输入(即键盘输入),但这个标准输入流是类的实例,使用不太方便,而且键盘输入内容都是文本内容 。
所以可以使用将其转换成字符输入流,普通的读取输入内容时依然不太方便,可以将普通的再次包装成,利用的()方法可以一次读取一行内容 。如下程序所示