文件通道能够根据位置指针去操作文件,比基于流的形式更灵活。
创建文件通道是基于某个流来创建的,比如基于文件输入流或者文件输出流。
文件输入流获取的通道只能进行读,文件输出流得到的文件通道只能进行写。如果读的通道进行写会报错
如果想获取即可以读,又可以写的文件通道,可以通过RandomAccessFile(file,rw)来实现
文件通道的transferTo()方法底层用到了zero copy技术,所以在网络传输数据时使用,来提高传输性能
创建读的通道
@Test
public void testInputChannel() throws IOException{
//通过文件输入流来创建的文件通道
FileChannel fc=new FileInputStream("word.txt").getChannel();
ByteBuffer buffer=ByteBuffer.allocate(20);
fc.read(buffer);
fc.close();
System.out.println(new String(buffer.array()));
}
创建写的通道
@Test
public void testOutputChannel() throws Exception{
FileChannel fc=new FileOutputStream("word.txt").getChannel();
ByteBuffer buffer=ByteBuffer.wrap("Good AfternoonJason".getBytes());
//可以指定位置进行写入
//fc.position(18);
//默认是覆盖写入
fc.write(buffer);
fc.close();
System.out.println("写入成功");
}