FileChannel.close() 是否关闭了底层流?
喜欢标题;关闭 a 是否会关闭基础文件流?FileChannel
从 AbstractInterruptibleChannel.close()
API 文档中,您可以阅读:
关闭此通道。
如果通道已关闭,则此方法将立即返回。否则,它会将通道标记为已关闭,然后调用该方法以完成关闭操作。
implCloseChannel
它调用 AbstractInterruptibleChannel.implCloseChannel
:
关闭此通道。
此方法由 close 方法调用,以执行关闭通道的实际工作。仅当通道尚未关闭时,才会调用此方法,并且永远不会多次调用此方法。
此方法的实现必须安排在此通道上的 I/O 操作中被阻塞的任何其他线程立即返回,方法是引发异常或正常返回。
这并不能说明关于流的任何信息。所以事实上,当我这样做时:
public static void copyFile(File from, File to)
throws IOException, FileNotFoundException {
FileChannel sc = null;
FileChannel dc = null;
try {
to.createNewFile();
sc = new FileInputStream(from).getChannel();
dc = new FileOutputStream(to).getChannel();
long pos = 0;
long total = sc.size();
while (pos < total)
pos += dc.transferFrom(sc, pos, total - pos);
} finally {
if (sc != null)
sc.close();
if (dc != null)
dc.close();
}
}
...我把流保持打开状态?