思路:
调用fileInputStream中的read(buf)方法,一次读取1024字节。返回值count为读取的字节数。将其放入到我们自定义的缓冲区buf数组中。当拷贝的时候从buf数组中一个下标一个下标的取值。

代码:


出现问题:
我们拷贝并不完全,1.7w KB的文件我们仅仅拷贝了65KB

错误原因:
读取avi文件使用字节流,读取的都是二进制位。类似如下格式
1010111010011101010101010111111111100000111111101110101...........
read方法一次读取一个字节(8个二进制位),很容易出现 1111-1111 这种情况。二进制的 1111-1111转换成十进制的 -1 导致程序终止

解决方法:
byte -1 转为 int -1
11111111 转为 11111111 11111111 11111111 11111111
提升了一个int类型,结果还是-1。还是-1的原因是因为在8个1前面又补了24个1所导致的
为了解决这种情况,我们可以在8个1前面补0。这样既保证了原字节数据不变。又可以避免-1出现。
于是我们返回 b的时候 &255
11111111 11111111 11111111 11111111
&0000000 0000000 0000000 11111111
----------------------------------------------------------------
0000000 0000000 0000000 11111111


网友评论