Gather: Scatter: 示例代碼:
1 /** 2 * channel Gather/Scatter 3 */ 4 public static void channelGatherScatter(){ 5 ByteBuffer head = ByteBuffer.allocate(4); 6 ByteBuffer body = ByteBuffer.allocate(100); 7 RandomAccessFile afile = null; 8 RandomAccessFile bfile = null; 9 ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); 10 try { 11 afile = new RandomAccessFile("hello.txt", "r"); 12 bfile = new RandomAccessFile("hehe.txt", "rw"); 13 readWriteLock.readLock().lock(); 14 FileChannel fileChannel = afile.getChannel(); 15 ByteBuffer[] buffers = {head, body}; 16 while (fileChannel.read(buffers) != -1){ 17 } 18 head.flip(); 19 body.flip(); 20 System.out.println(new String(head.array())); 21 System.out.println(new String(body.array())); 22 readWriteLock.readLock().unlock(); 23 fileChannel.close(); 24 afile.close(); 25 26 readWriteLock.writeLock().lock(); 27 FileChannel bfileChannel = bfile.getChannel(); 28 29 while (bfileChannel.write(buffers) > 0){ 30 } 31 32 readWriteLock.writeLock().unlock(); 33 bfileChannel.close(); 34 bfile.close(); 35 }catch (Exception e){ 36 e.printStackTrace(); 37 } 38 }帶offset、length參數重載read write方法,指明從那個buffer開始,共使用多少個buffer。