A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许冉 黑马帝   /  2011-10-11 15:04  /  2133 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个char占两个字节
1,从键盘输入一个字符,它是几个字节的
     读取键盘录入时,可以用read方法读取一个字符,可是read读取的是一个字节啊,
2,如果把读取的几个字符存到byte数组中或char数组中,有什么区别
3,当我们定义一个char时,是两个字节吧
     把一个char放在byte数组中,是不是只放进去一个字节啊
一会两个字节,一会一个字节都弄乱了,懂的给讲讲细节

评分

参与人数 1技术分 +1 黑马币 +4 收起 理由
wangfayin + 1 + 4 赞一个!

查看全部评分

3 个回复

倒序浏览
要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 作为 encoding。unicode 4.0 标准包含从 U+0000-U+FFFF 的基本多语言平面和 U+10000-U+10FFFF 的扩展平面的文字,这是 code point。Java 的 char 类型是 16 bit 的,所以单个 char 只支持基本平面内的文字,而扩展平面的文字是由一对 char 来表示的。
而 String.getBytes() 这个方法是按照指定的 encoding 返回字符串,一般中文系统的默认编码是 utf-8 (linux, mac) 或者 gbk/gb18030 (windows)。只要是基本平面内的文字,utf-8码的中文都是3字节的,而 gbk/gbk18030 是2字节的。
哦,我只是一个搬运工,

评分

参与人数 1黑马币 +4 收起 理由
wangfayin + 4 辛苦!

查看全部评分

回复 使用道具 举报
许冉 黑马帝 2011-10-12 14:35:26
藤椅
庞金梁 发表于 2011-10-11 16:03
要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 ...

貌似编码的问题很难看懂
回复 使用道具 举报
二楼,说的好犀利....密密麻麻,呵呵!
         我说的饿通俗一点把:这个read,楼主你指的是字符流的read,还是字节流的read啊!
        【拓展:】 还有需要了解的是编码问题,我们系统默认的gbk编码,这个编码的特点就是,英文,字符,占一个字节,汉字占两个字节, 其在二进制中的表现形式是有区别的,汉字的开头,貌似,好像,是-1开头。字母好像是0开头的。我记忆中好像是这样,您要是想深入了解,可以去查查。
         重点的来了啊!!!
         字节流:(InputStream)的read方法一次性读取的是一个字节,管它是汉字,英文。
         字符流:(Reader)的read方法是一次性读取一个字符,其到底一次读取一个字节,还是两个字节,就是看内存中的二进制代码的特征,要是开头是-1就一次性读取两个字节反之就读取一个字节。

        上边的是读得方法,
        下边的是写的方法。(涉及到乱码的问题。)
         当我们输出的时候,系统默认的是gbk的所以它也会自动判断,将二进制转换为相应的字符。这个时候我们也可以指定字符的编码集。
          为什么有时候会乱码呢!原因就是,我们在读取文件的时候是按照gbk的读进来,然后我们写出去的时候又按照utf的格式写出去,这样就产生乱码了!

         建议:多多研究IO流中字符字符编码转换的文档,了解其内部原理。

评分

参与人数 2技术分 +2 黑马币 +2 收起 理由
admin + 2
许冉 + 2 辛苦了

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马