在之前写的一篇文章中从两段代码审视编码能力 , 两段都是对IO流的操作。
这两段代码到底哪段好些呢?
第一段是没有收尾,开了流但不一定被关闭,当然在 JDK7中,关闭流不需要手动去完成了。
第二段看似很好,收尾工作也做了,而且效率好像应该还高些,毕竟可能少调用一次read方 法。
但就是第二段代码有一个严重的问题,就是字节丢失问题。
if(rc < data.length)
break;
这两行,看似提高了效率,但这儿有字节丢失问题。并不是每一次都读一个data数组长度的数据,有时也是读不满的。
所以要注 意一下。
最简洁的处理方法:
while ((bytesRead = inbuf.read(buffer)) != -1) {
buf.write(buffer, 0, bytesRead);
}