本帖最后由 高亮亮 于 2014-1-14 11:02 编辑
因为你在读取的时候,没有加入flush();
这样的情况,有两种:
一种是PrintXxx流中可以,(前提是开启了自动刷新,并使用固定的输出方式)
另一种是普通的字节流,这样的流中的write(int byte)写一个字节是不用刷新的.
而如果用的是缓冲区的字节流,这样的流中writh(int byte)实际上是自动刷到了缓冲区中的一个byte数组中,而这个缓冲区是隔一段固定时间刷新写入文件一次.所以,你最后一次结束的时候,未close(),那一组数据可能未刷新.这样就丢失那最后一组的数据.具体情况,JDK源码应该可以看到些东东.
下面是我的试验:
普通字节流:
字节高效流:
左边为源文件,右边为高效字节流,都没有给刷新语句和结束语句.
结论:
我的分析是没错的.
普通字节流没问题.
用的缓冲字节流的话,要考虑最后那个缓冲区数据让他写入目标文件才行....
|