为了账号安全,请及时绑定邮箱和手机立即绑定

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
想输出十六进制前面补0不用那么麻烦。
System.out.printf( "%02x"+" ",buf[i] );//%x输出16进制,%02x输出两位十六进制,不足两位前面补0
为了验证这种想法,我们直接输出b,也就是b的整数形式System.out.print( b + " " );结果是:-60 -67.什么时候&的作用是去掉0呢,没错,这个字节的二进制存储中第一位是0,也就是说是个正数。比如'腣'这个字,它的Integer.toHexString( b )结果是ffffffc4 56,第二个字节56在内存中的二进制数是0101 0110,所以当读取56这个十六进制数时,自然当做正数存储,而正数的补码是其本身!
我们知道一个字节占8位,可以表示两个16进制数,c4和bd的2进制表示分别为:1100 0100,1011 1101.可以看到他们的第一位都是1.而计算机是以补码形式存储数据。当计算机读取c4时,发现第一位是1,所以c4表示的整数是负数,要得到该负数需要进行取反+1操作得到它表示的正数,然后添加符号位。1100 0100取反+1后是0011 1100,即十进制的60,所以c4表示的是-60。而-60作为一个整形在内存中是以ffffffc4存储的。
我来解释下Integer.toHexString( b & 0xff )的作用。首先老师讲的有点小错误,不是去掉24个0,是去掉24个【0或1】.为什么呢? 我们以GBK编码的‘慕’为例,如果直接输出Integer.toHexString( b ),不进行&操作。结果是:ffffffc4 ffffffbd.可以看出&操作去掉的是6个f也就是24个1.不应该是24个0吗?
这位老师讲课太快了
老师讲的太好了,要是每学一节就布置点任务就更好了
byte类型8位,int类型32位,为了避免数据转换错误,通过&0xff将高24位清零
没基础的听这个会晕的!但是有基础的听起来还是蛮好的。
以前只知道会乱码,完全不知道底层含义,现在有点清新了
老师讲的真的非常好,非常好非常好。。。
讲的真好,大赞
我深陷学习的流沙无法自拔。
@禹爸爸
java.io.FileOutputStream.write(byte[] b, int off, int len)
Parameters:
b the data.
off the start offset in the data.
len the number of bytes to write.
计算机组成原理
课程须知
亲,为了更好的学习本门课程,需要您对二进制的知识有所了解,还要熟悉Java的基本语法和面向对象的知识。
老师告诉你能学到什么?
1、了解文件编码。 2、能够对文件和目录进行管理操作。 3、能够应用字节流和字符流对文件进行读写操作。 4、能够对对象进行序列化和反序列化。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消