思路:
调用fileInputStream中的read(buf)方法,一次读取1024字节。返回值count为读取的字节数。将其放入到我们自定义的缓冲区buf数组中。当拷贝的时候从buf数组中一个下标一个下标的取值。
![](https://img.haomeiwen.com/i13091615/4574fe505c308504.png)
代码:
![](https://img.haomeiwen.com/i13091615/89c330c753c5c29e.png)
![](https://img.haomeiwen.com/i13091615/3e80f2187e536bfd.png)
出现问题:
我们拷贝并不完全,1.7w KB的文件我们仅仅拷贝了65KB
![](https://img.haomeiwen.com/i13091615/2fdd896a19ef3d4a.png)
错误原因:
读取avi文件使用字节流,读取的都是二进制位。类似如下格式
1010111010011101010101010111111111100000111111101110101...........
read方法一次读取一个字节(8个二进制位),很容易出现 1111-1111 这种情况。二进制的 1111-1111转换成十进制的 -1 导致程序终止
![](https://img.haomeiwen.com/i13091615/dd1c9a33fbff843f.png)
解决方法:
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
![](https://img.haomeiwen.com/i13091615/3abae2f3f607ddb8.png)
![](https://img.haomeiwen.com/i13091615/c0e92e28fc0eab2a.png)
网友评论