这个主要是针对字节类型的文件的,像mp3,这样的字节类型文件,在内部都是以二进制形式存储的。
这样的话它的第一个字节就可能是11111111------>-1,当你read第一个字节的时候,就可能读出-1.
-1这个数据使while循环里的判断条件为false,循环就不执行了,也就读不出数据了。读不出来,自然也谈不上写
这样就等于没有复制成功。
解决的办法:让byte类型提升为int。即:11111111----->11111111-11111111-11111111-11111111-------->(-1)
这也就是为什么myRead()返回的是Int 类型。但是这样提升后,int类型的32位都是1,十进制还是-1,还没有完全解决。
那我们既想保证原数据的原样性,又不让它出现-1,于是就让这个32位全1的int型数据前24位补0,保留低8位为1.
能做到这一点的可行方法是让它&00000000-00000000-00000000-11111111,这样就原来的byte 类型的-1就最终转成了int类型的255,
避免了要读的数使while()为false而导致一开始就不能读或还没复制完循环就结束的情况发生。
提醒一点:我们复制的是byte类型的文件,可是我们读的时候把它转成了Int型,这样读出来的数就比原数多点4倍的空间。可是我们复制
完发现,文件大小没有变化。那是因为read()方法是将byte提升为Int,而write()方法在复制的时候又自动的只取int类型32位的低8位,也就是有效位。
相当于又把Int降为byte,然后再写入文件。
|