黑马程序员技术交流社区
标题:
IO流MP3复制疑问
[打印本页]
作者:
李万海
时间:
2013-3-31 21:02
标题:
IO流MP3复制疑问
本帖最后由 李万海 于 2013-3-31 22:30 编辑
public int myRead()throws IOException
{
//通过in对象读取硬盘上数据,并存储buf中。
if(count==0)
{
count = in.read(buf);
if(count<0)
return -1;
pos = 0;
byte b = buf[pos];
count--;
pos++;
return b&255;
}
else if(count>0)
{
byte b = buf[pos];
count--;
pos++;
return b&0xff;
}
return -1;
}
复制代码
问一下 老师为了区别-1和2进制-1 ,操作了&255 返回int 避免了-1这个问题。
但是-1的问题是解决了 ,正常的数据也被&255操作了,这样正常数据不就也变化了吗 ?不是很明白这里是怎么操作过去的 ,求解。
作者:
袁梦希
时间:
2013-3-31 21:12
本帖最后由 袁梦希 于 2013-3-31 21:22 编辑
楼主你好 正常数据不是不会变化的 因为&255是为了防止他的返回值不为-1,如果返回的为-1了,那么就复制的MP3肯定不够
那么正常数据才会出现错误。11111111 是byte型是-1,前面补了24个1是int型的-1,还是-1,所以&255才不会返回就不会返回错误时候的-1了。
结论:
字节流的读一个字节的read方法为什么返回值类型不是byte,而是int。
因为有可能会读到连续8个二进制1的情况,8个二进制1对应的十进制是-1.
那么就会数据还没有读完,就结束的情况。因为我们判断读取结束是通过结尾标记-1来确定的。
所以,为了避免这种情况将读到的字节进行int类型的提升。
并在保留原字节数据的情况前面了补了24个0,变成了int类型的数值。
而在写入数据时,只写该int类型数据的最低8位。
作者:
陈丽莉
时间:
2013-3-31 21:54
若还有问题,请继续追问; 没有的话,将帖子分类改成【已解决】~
作者:
李力
时间:
2013-3-31 23:17
学习了!{:soso_e113:}
作者:
杨武林
时间:
2013-4-1 20:32
学习了{:soso_e100:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2