由FileInputStream的read()、read(byte[])两个函数的使用,重新认识ascii编码、Unicode编码有什么用?

由FileInputStream的read()、read(byte[])两个函数的使用,重新认识ascii编码、Unicode编码有什么用?



1FileInputStream的read()、read(byte[])两个函数的使用

https://www.cnblogs.com/Hfly/p/4759132.html

1)read()函数








2)read(byte[])函数


my解析:123的根据ascii编码转换成的二进制是:001100010011001000110011

fis.read(b)的意思是:从此输入流中将最多2个字节(怎么理解“最多”?答案是:如果剩下的不够2个字节的话,有多少读多少 )的数据读入一个byte 数组b中,fis.read(b)其输出的结果是写入后的b的字节数。

for(int i=0;i<3;i++)这个循环:


i=0,即第一次循环,fis.read(b)后,byte数组b的内容是什么{00110001,00110010},所以Arrasys.toString()返回[49,50],fis.read(b)返回值是2,因为读取了两个字节。

i=1,即第二次循环,fis.read(b)后,byte数组b的内容是什么{00110011,00110010},因为只从流中读到了一个字节,所以只替换了byte数组的第一个元素,第二个元素不修改。fis.read(b)返回值是1,因为读取了1个字节。

i=2,即第三次循环,fis.read(b)后,byte数组b的内容是什么{00110011,00110010},因为从流中一个字节也不读到,所以byte数组的任何一个元素都不修改。fis.read(b)返回值是-1,因为没有读取任何一个字节。


理解了这个:

jf框架的附件下载代码的如下代码就很好理解了:



2ascii码、unicode编码有什么用?感觉没有什么用。

 为什么要用asc码,数字1存在电脑里不就是转换成010101存起来不就行了,显示的时候把010101码即二进制码换原成十进制1显示出来不就行了?要ascii码干什么?哪里使用到ascii码了?
答案:如果我创建一个txt文件,内容写入一个“1”,并保存。那么1对应的二进制是什么呢?
这里的1是一个字符,而不是数值。所以他对应的二进制数是什么,不能用十进制转二进制那么来计算。

那通过什么呢?ascii码,他里面规定了“1”对应的二进制是什么。编码和解码,都遵循这个规则就可以正常保存和显示了。
那么为什么还有将十进制换算成二进制的应用呢?答案是:因为是计算的需要,如3+2的计算,计算机是将3转换成二进制,将2转换成二进制,然后进行二进制运算,计算出结果来的,所以有十进制转换成二进制的应用。


总结:
ascii编码,跟编程语言没有关系(如java),你在windows系统中在txt中写入“hello 123”,并保存,这就遇到了编码的问题。
什么是编码?说白了,就是“hello 123”存入计算机中,要变成0101010这样的二进制,而每一个符号用什么二进制(即01010的组合)来表示,就需要有个规则。

编码解码,是一对。编码对应字符“hello 123”保存成二进制,解码对应二进制显示成字符“hello 123”



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值