JAVAプレミアムベース(49)---分散読み込みと集約書き込み


分散読み込みと集約書き込み

  • read(ByteBuffer[] bufs);//分散読取
  • write(ByteBuffer[] bufs);//集約書き込み
  • 分散リード(Scattering Reads)とは、Channleから読み取ったデータを複数のBufferに「分散」することを意味する
    注意:バッファの順に、Channleから読み込んだデータを順にBufferで埋めます
    集計ライト(GatheringWrites)とは、複数のBufferのデータをChannleに「集計」することを意味する
    注意:positionとlimitの間のデータをバッファの順序でChannleに書き込む
    package org.lanqiao.channel.demo;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    /*
     *  
     */
    public class ChannelDemo {
    	public static void main(String[] args) throws IOException {
    		// :
    		RandomAccessFile raf = new  RandomAccessFile("Notes.txt","rw");
    		RandomAccessFile rafOut = new RandomAccessFile("copy.txt", "rw");
    		FileChannel inChannel = raf.getChannel();
    		FileChannel outChannel = rafOut.getChannel();
    		// :
    		ByteBuffer buf1 = ByteBuffer.allocate(100);
    		ByteBuffer buf2 = ByteBuffer.allocate(1024);
    		ByteBuffer buf3 = ByteBuffer.allocate(100);
    		ByteBuffer[] bufs = {buf1 , buf2,buf3};
    		
    		while((inChannel.read(bufs)) != -1) {
    			for(ByteBuffer bb :bufs) {
    				bb.flip();
    				System.out.println(new String(bb.array(),0,bb.limit()));
    				bb.clear();
    				System.out.println("-------------------------------------");
    				
    			}
    			System.out.println("++++++++++++++++++++++++++");
    		}
    		/*// 
    		while((inChannel.read(bufs)) != -1) {
    			for(ByteBuffer bb :bufs) {
    				bb.flip();
    				outChannel.write(bb);
    				bb.clear();
    				
    			}
    			
    		}*/
    		inChannel.close();
    		outChannel.close();	
    	}
    }