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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Alex shaw 中级黑马   /  2013-3-20 09:33  /  1648 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 肖路宽 于 2013-3-20 12:18 编辑

老毕关于IO流19天第十四个视频讲的自定义字节流缓冲区,为什么要用一个byte与上一个00000000000000000000000011111111,求解释

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,否则将扣除技术分,谢谢  发表于 2013-3-20 12:17

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
是这个样子的

字节流读取数据 以 -1来作为标示
而在字节流读取的时候每次读一个字节 也就是8位  很有可能读取的8为全是1  
也就是11111111  这个就是byte类型的-1 而返回值是int型的所以会提升为1111111 1111111 1111111 1111111  这个恰好为int类型的-1
这时字节流read方法返回-1这个值  程序认为已经读取完毕 然而并非如此 后边还有没有读取的数据 所以这样是不行的

于是 必须在读取数据提升为1111111 1111111 1111111 1111111 且返回之前&上个00000000000000000000000011111111   
使数据前24位为0  也就是00000000 00000000 00000000 1111111   这个是int类型的255  而不是-1 所以返回的数值为255

当字节流在写入时 又会将32位的数据 只取后8位  就又成了111111   

这个视频上有详细讲解的  建议楼主仔细看看在

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
刘凯 发表于 2013-3-20 09:45
是这个样子的

字节流读取数据 以 -1来作为标示

扫噶,我当时看了,只不过不是太懂,讲的很详细,谢谢
回复 使用道具 举报
本帖最后由 张亚青 于 2013-3-20 09:53 编辑

一、因为读取的时候如果读取媒体文件到byte[]字节数组中,每次读取1个字节,即8个bit,有可能会遇到 11111111,而该值直接赋值给int类型并返回的话 ,值为-1,会造成“字节流读取结束”的假象,(值-1,为读取到结束的标志)。
二、为了解决这一问题,就在每次读取8bit的时候,手动在前面补上24个0,byte类型的“11111111”就会变成int类型的 “00000000 00000000 00000000 11111111”;
三、为了实现上面这一技术,就要让“11111111”和“00000000000000000000000011111111”相与&。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
张亚青 发表于 2013-3-20 09:49
一、因为读取的时候如果读取媒体文件到byte[]字节数组中,每次读取1个字节,即8个bit,有可能会遇到 111111 ...

恩 明白了 谢啦 哥们
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马