良葛格学习笔记输入输入一章中的PushbackInputStream的补充
在良葛格学习笔记输入输出一章中,本人感觉有些地方说的不是很清楚,现补充如下,望指正!
14.2.9 PushbackInputStream
java.io.PushbackInputStream 拥有一个 PushBack 缓冲区, 从 PushbackInputStream 读出数据后,只要 PushBack 缓冲区没有满,就可以使用 unread() 将数据推回流的前端。
举个使用 PushbackInputStream 的例子。假设一个文本文件中同时存储有 ASCII 码范围的英文字符与 BIG5 码范围的中文字符。您希望判断出哪些位置是 ASCII 而哪些位置是 BIG5 中文字符的位置, BIG5 中文字符使用两个字节来表示一个中文字,而ASCII 只使用一个字节来表示英文字符。
BIG5 中文为了与 ASCII 兼容,低字节范围为 0xA4~0xF9,而高字节为 0x40~0x7E 以及 0xA1~0xFE。存储时低字节先存,再存高字节,所以读取时只要先读到字节是在 0xA4~0xF9,就表示它可能是一个中文字的前半数据。为了说明 PushbackInputStream 的功能,在范例14.15 中一次从文件中读取两个字节,并检查两个字节合并后的整数值是否在 0xA440 与 0xFFFF 之间,这样可以简单地判断其两个字节合并后是否为 BIG5 码。如果是 BIG5 码则使用这两个字节产生 String 实例以显示汉字字符;如果不在这个范围之内,则可能是个 ASCII 范围内的字符,您可以显示第一个字节的字符表示,并将读出的第二个字节推回流,以待下一次可以重新读取。
[b]补充:
BIG5码的编码方案:每个汉字由两个字节构成,第一字节(低字节)的范围 0X81-0XFE,共126种。第二个字节(高字节)的范围分别为 0X40-0X7E, 0XA1-0XFE,共157种。利用这两个字节共可定义出 126 * 157=19782种汉字。存储按照低字节先存入。所以编码范围是0x8140-0xFE7E, 0x81A1-0xFEFE。
其中 0xA140-0xA17E, 0xA1A1-0xA1FE 是图形符号区;0xA440-0xF97E, 0xA4A1-0xF9FE 是汉字区。
常用汉字如一、丁,BIG5码的范围为 0XA440-0XC671,共5401个;较不常用的字,如滥、调,即次常用字,范围为 0XC940-0XF9FE,共7652个。 [/b]
tmp = (short)((array[0] << 8 ) | (array[1] & 0xff));
假如是汉字“这”,那么输出ffffd5e2
tmp = tmp & 0xFFFF;
输出d5e2
良葛格学习笔记输入输入一章中的PushbackInputStream的补充相关推荐
- java学习笔记-良葛格_Java良葛格 学习笔记《二》
正则表达式 . 符合任一字符 \d 符合0到9任一个数字字符 \D 符合0-9以外的字符 \s 符合'\t'.'\n'.'\x0B'.'\f'.'\r'等空格符 \w 符合a到z.A到Z.0到9等字符 ...
- 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述
<繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...
- 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)
<繁凡的深度学习笔记>第 2 章 回归问题与神经元模型(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net/ http ...
- 机器学习理论《统计学习方法》学习笔记:第六章 逻辑斯谛回归与最大熵模型
机器学习理论<统计学习方法>学习笔记:第六章 逻辑斯谛回归与最大熵模型 6 逻辑斯谛回归与最大熵模型 6.1 逻辑斯谛回归模型 6.1.1 逻辑斯谛分布 6.1.2 二项逻辑斯蒂回归模型 ...
- 机器学习理论《统计学习方法》学习笔记:第五章 决策树
机器学习理论<统计学习方法>学习笔记:第五章 决策树 决策树 5.1 决策树模型与学习 5.1.1 决策树模型 5.1.2 决策树与if-then规则 5.1.3 决策树与条件概率分布 5 ...
- 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法
机器学习理论<统计学习方法>学习笔记:第四章 朴素贝叶斯法 4 朴素贝叶斯法 4.1 朴素贝叶斯法的学习与分类 4.1.1 基本方法 4.1.2 后验概率最大化的含义 4.2 朴素贝叶斯法 ...
- 机器学习理论《统计学习方法》学习笔记:第三章 k近邻法
机器学习理论<统计学习方法>学习笔记:第三章 k近邻法 3 k近邻法 3.1 K近邻算法 3.2 K近邻模型 3.2.1 模型 3.2.2 距离度量 3.2.3 K值的选择 3.2.4 分 ...
- JavaScript学习笔记06【高级——JavaScript中的事件】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...
- 系统架构师学习笔记_第六章(下)_连载
系统架构师学习笔记_第六章(下)_连载 6.3 基于 UML 的软件开发过程 6.3.1 开发过程概述 UML 是独立于软件开发过程的,能够在几乎任何一种软件开发过程中使用.迭代的渐进式软件开发过程 ...
最新文章
- python中的数据类型有哪些是可阅读,Python中典型的数据类型中哪个只能阅读不能修改...
- 批量put和单条put
- ZZULIOJ ASCII码排序(多实例测试)
- sed for windows 双引号内部内容的替换
- SQL Server游标
- 3.3.4.5. 日期计算
- python人民币转大写_python将人民币转换大写的脚本代码
- 数据结构的基本概念(ADT 抽象数据类型 数据结构三要素)
- 贝塞尔插值曲线绘制软件设计
- 算法入门模拟-剪刀石头布
- 目前国内几大著名报表软件
- 院士给自己博士生写的一封信:博士生每天工作12小时只是一个下限
- 理解梅尔频谱(mel spectrogram)
- 必备软件——下载工具
- VB编程:去除文本框首尾空行-51_彭世瑜_新浪博客
- 考研复试 计算机英语
- MAL-Gold Nanoparticle/Au nanoparticles纳米金颗粒/金纳米粒子|50nm浓度:0.5mg/ml
- 天干地支纪年法中为什么是60年一个轮回,而不是120年
- 如何c语言看字节大小,C语言字节大小day5
- 北京理工大学研究生计算机专业好考吗,北京理工大学计算机专业研究生的方向问题...