不,这是不正确的。您冒着丢失数据的风险。规范的NIO复制循环如下:
while (in.read(buffer) >= 0 || buffer.position() > 0){ buffer.flip(); out.write(buffer); buffer.compact();}
请注意已更改的循环条件,该条件需要在EOS处刷新输出,而使用
compact()代替条件
clear(),则可以避免发生短写入的情况。
类似地,规范
transferTo()/transferFrom()循环如下:
long offset = 0;long quantum = 1024*1024; // or however much you want to transfer at a timelong count;while ((count = out.transferFrom(in, offset, quantum)) > 0){ offset += count;}
它必须在循环中调用,因为不能保证传递整个量子。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)