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)
方法将文件内容和元数据(文件的权限等信息)立刻写入磁盘。