程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA NIO Scatter/Gather(矢量IO),nioscatter

JAVA NIO Scatter/Gather(矢量IO),nioscatter

編輯:JAVA綜合教程

JAVA NIO Scatter/Gather(矢量IO),nioscatter


矢量IO=Scatter/Gather:   在多個緩沖區上實現一個簡單的IO操作。減少或避免了緩沖區拷貝和系統調用(IO)   write:Gather 數據從幾個緩沖區順序抽取並沿著通道發送,就好比全部緩沖區全部連接起來放入一個大的緩沖區進行發送,緩沖區本身不具備gather能力。 read:Scatter 從通道讀取的數據會按順序散布到多個緩沖區,直到緩沖區被填滿或者通道數據讀完。  

 

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。    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved