2-9困惑的部分

2-9困惑的部分

1、计算机的计量单位,只有bit和byte吗,就没有int,long,short,double,float?那么kb、mb、gb、G、T又是什么?

2、老师,字节数组,是指存储以字节作为计量单位的一大堆的二进制数据吗?如果是二进制数据,那么在课程里通过for循环打印出来的怎么是像78,32,这样的数字而不是0和1?

3、UTF-8和GBK、ascii、unicode都是编码吗?如果都是编码,为什么在eclipse默认用UTF-8和GBK呢?

4、

//将byte数组转换为字符串

String str1=new String(arrs,"GBK");

然后,得在定义方法处声明异常:throws UnsupportedEncodingException

老师,我不懂,为什么new String类对象时,参数里写了GBK后,要声明异常,难道GBK是异常?我用的还是Windows的eclipse。。。


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

         同学你好,查看源码可知,String类中带编码方式的构造方法,Java在定义时抛出UnsupportedEncodingException异常,所以我们在使用该构造方法创建对象时,需要捕获该异常。Java的这种设计,有其定义的规范,这里我们不用纠结,会用即可。

http://img1.sycdn.imooc.com//climg/5d11c2a40001000505410436.jpg

        如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2019-06-24 19:25:35

        同学你好,1、这里调用getBytes方法后,就是将字符串转化为一个byte类型的数组,所以输出的也是byte类型的数据,这里请注意

        1)、二进制不是数据类型,它只是一种数据表示的形式!

        2)、java的底层涉及到C++,jvm等,计算机识别的都是二进制,在控制台输出的是底层代码处理好的,而具体它是如何实现的,同学这里不用纠结。

2、这里同学写GBK是存在的,但是这是一个参数,可以传入GBK,也可以传入其他值,所以这个编码有可能不存在,java虚拟机是需要在底层中运行以后才知道是不是真正存在,所以这个方法在设计的时候,就要求需要处理UnsupportedEncodingException这个异常哦!

        如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 鱼儿0001 #1
    谢谢老师的耐心回复。关于老师的第二个回复,不太懂。因为GBK存在,还需要处理,按照这个解释,那么所有正常的代码、参数都得抛出异常了,因为都可能存在异常、、、、
    2019-06-25 11:39:28
好帮手慕小班 2019-06-23 17:06:58

        同学你好,1)、计算机的计量单位是B, KB,MB,GB 等,KB 是byte(也就是B)的1000倍,MB是KB的1000倍,以此类推,但是计算机的计量单位并没有int,short,long等,这些都是java中的数据类型哦!

        2)、在计算机底层,是以二进制的形式存储对应编码下的这些字节,比如,字母J对应的编码是74,就会在计算机底层中存入74的二进制码-->对应在底层中就是1001010,但是这个二进制是存入计算机底层时的代码,并不是给我们展示的哦!

        3)、ASCII是英文中的字符,用128个符号编码就够了;

        由于ASCII编码不支持中文,于是,国人就定义了一套编码规则:当字符小于127位时,与ASCII的字符相同,但当两个大于127的字符连接在一起时,就代表一个汉字对应就有了GBK的编码;

        Unicode将世界上所有的符号纳入其中,规定了符号的二进制编码;

        但是并没有规定这个二进制代码的存储方式,所以UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式,所以这里常用的就是GBK和UTF-8哦!

  

        4)、throws UnsupportedEncodingException是不支持的编码异常,意思是当解释编码不存在时,会出现这个异常,例如:String str1=new String(arrs,"SSS");这个sss是不存在的编码形式,所以这里就会出现一个UnsupportedEncodingException异常,在定义这个方法时java要求处理这个异常哦!

        如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 鱼儿0001 #1
    谢谢老师的耐心回复。1、关于我问的第二个问题,我还是不懂,调用getBytes方法后,将字符串转换为二进制数组,数组里存有一大堆二进制数据,老师我这里的理解对不对?2、然后,在控制台运行打印输出的不是0和1,而是78,32,这样的数组,这算哪门子的二进制数据啊,我不懂。。。。3、关于我问的第四个问题,老师GBK是存在的编码形式啊,String str1=new String(arrs,"GBK");为什么还会报错,需要抛出异常呢?
    2019-06-24 12:03:18
  • 慕粉121948417 回复 提问者 鱼儿0001 #2
    同学你好,报错是因为有可能会出现UnsupportedEncodingException这种异常,String str1=new String(arrs,"GBK");是让arrs数组使用GBK编码来进行字符串转换,但是咱们不能确定arrs是什么编码,不能确认是不是默认的UTF-8。所以就要对有可能出现的exception进行处理。这是我的理解。
    2019-07-05 11:26:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师