Java I/O Practice

FileChannel And MMAP

Java IO 操作:

  • 普通 I/O (java.io): 阻塞式
  • File Channel (java.nio): 阻塞式
  • MMAP (java.nio): File Channel 衍生出来的一种方式,非阻塞式

Usage

1
2
3
4
5
//  FIleChannel 的方式
FileChannel fileChannel = new RandomAccessFile(new File("db.data"), "rw").getChannel();

// MMAP 的方式
MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, filechannel.size();

Write and Read Operation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 写
byte[] data = new byte[4096];
long position = 1024L;
//指定 position 写入 4kb 的数据
fileChannel.write(ByteBuffer.wrap(data), position);
//从当前文件指针的位置写入 4kb 的数据
fileChannel.write(ByteBuffer.wrap(data));

// 读
ByteBuffer buffer = ByteBuffer.allocate(4096);
long position = 1024L;
//指定 position 读取 4kb 的数据
fileChannel.read(buffer,position);
//从当前文件指针的位置读取 4kb 的数据
fileChannel.read(buffer);

Reference