Java NIO文件通道:操作与锁机制详解
1. 文件通道概述
文件通道(FileChannel)提供了许多特定于文件的新方法,这些方法涵盖了常见的文件操作,也有一些可能是你不太熟悉的。文件通道总是阻塞的,无法设置为非阻塞模式。现代操作系统具备复杂的缓存和预取算法,通常能让本地磁盘I/O的延迟非常低。网络文件系统的延迟一般较高,但也常能从相同的优化中受益。由于文件I/O的本质与面向流的I/O不同,面向流的I/O的非阻塞模式对于面向文件的操作意义不大。对于文件I/O,异步I/O才是真正的优势所在,它允许进程向操作系统请求一个或多个I/O操作,而无需等待操作完成,之后进程会收到请求的I/O操作已完成的通知。不过,异步I/O是一项高级功能,许多操作系统并不支持,目前正在考虑作为未来NIO的增强功能。
文件通道对象不能直接创建,只能通过在打开的文件对象(如RandomAccessFile、FileInputStream或FileOutputStream)上调用 getChannel()
方法来获取。调用该方法会返回一个与该文件相连的FileChannel对象,其访问权限与文件对象相同。以下是FileChannel的部分API:
package java.nio.channels;
public abstract class FileChannel
extends AbstractChannel
implements ByteChannel, GatheringByteChannel, ScatteringByteChannel
{
// 这是部分