0%

java | FileChannel

FileChannel 只能工作在阻塞模式下。

获取

不能直接打开 FileChannel,必须通过

  • FileInputStream
    • 获取 channel 只能读
  • FileOutputStream
    • 获取 channel 只能写
  • RandomAccessFile
    • 是否读写,根据读写模式决定

读取

会从 channel 读取数据填充到 ByteBuffer,返回值表示读到了多少字节,-1表示到达了文件的末尾。

1
int readBytes = channel.read(buffer);

写入

写入的正确姿势

1
2
3
4
5
6
7
ByteBuffer buffer = ...;
buffer.put(...) // 存入数据
buffer.flip(); //切换读模式

while(buffer.hasRemaining()){
channel.write(buffer);
}

while 中调用 channel.write 是因为 write 方法并不能保证一次将 buffer 中的内容全部写入 channel

关闭

channel 必须关闭。

大小

使用 size 方法获取文件大小

强制写入

操作系统出于性能考虑,会将数据缓存,不是立刻写入磁盘。可以调用 force(true) 方法将文件内容和元数据(文件的权限等信息)立刻写入磁盘。

请我喝杯咖啡吧~