JAVAプレミアムベース(49)---分散読み込みと集約書き込み
1637 ワード
分散読み込みと集約書き込み
注意:バッファの順に、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();
}
}