FileChannel 只能工作在阻塞模式下。
获取
不能直接打开 FileChannel,必须通过
FileInputStream- 获取
channel只能读
- 获取
FileOutputStream- 获取
channel只能写
- 获取
RandomAccessFile- 是否读写,根据读写模式决定
读取
会从 channel 读取数据填充到 ByteBuffer,返回值表示读到了多少字节,-1表示到达了文件的末尾。
1 | int readBytes = channel.read(buffer); |
写入
写入的正确姿势
1 | ByteBuffer buffer = ...; |
在 while 中调用 channel.write 是因为 write 方法并不能保证一次将 buffer 中的内容全部写入 channel。
关闭
channel 必须关闭。
大小
使用 size 方法获取文件大小
强制写入
操作系统出于性能考虑,会将数据缓存,不是立刻写入磁盘。可以调用 force(true) 方法将文件内容和元数据(文件的权限等信息)立刻写入磁盘。