美文网首页
java34(自定义缓冲区拷贝avi文件失败问题分析)

java34(自定义缓冲区拷贝avi文件失败问题分析)

作者: 机智的老刘明同志 | 来源:发表于2019-02-13 18:08 被阅读5次

思路:

        调用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 

结果也恢复正常

相关文章

网友评论

      本文标题:java34(自定义缓冲区拷贝avi文件失败问题分析)

      本文链接:https://www.haomeiwen.com/subject/pmideqtx.html