package com.itbuluoge.nio;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class GetChannel {

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {

/*通过通道写入文件*/
FileChannel fc=new FileOutputStream("data.txt").getChannel();
fc.write(ByteBuffer.wrap("123456789".getBytes()));
fc.close();


/*读出文件*/
fc=new FileInputStream("data.txt").getChannel();
ByteBuffer buff=ByteBuffer.allocate(9);
fc.read(buff);
buff.flip();
while(buff.hasRemaining())
{
System.out.print((char)buff.get());
}
}

}



输出

FileChannel的用法_数据块


这里有几个注意的点

第一,FileChannel类似与FileReader一样。

第二,FileChannel.read(ByteBuffer),将会读入一个ByteBuffer大小的数据块。

第三,在读取ByteBuffer的时候,需要设置ByteBuffer为读状态,也就是调用buff.flip();否则会无法读出数据。