nio学习之channel,基于流的方式获取channel

package nio;

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

//测试channel
//使用基于流的channel方式
public class testChannel {
    public static void main(String[] a){
        //传统方式的channel方式
        try {
            FileInputStream fileInputStream = new FileInputStream("e:/11.txt");//获取输入流
            FileChannel fileChannel = fileInputStream.getChannel();//获取channel

            FileOutputStream fileOutputStream = new FileOutputStream("e:/22.txt");//获取输出流
            FileChannel fileChannel1 = fileOutputStream.getChannel();

            //创建缓冲区
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
            //从通道中读取数据
            while (fileChannel.read(byteBuffer) != -1)
            {
                //转换为读数据模式
                byteBuffer.flip();
                fileChannel1.write(byteBuffer);
                //清空缓冲区
                byteBuffer.clear();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

记得要关闭流!本例没有关闭。

基于内存映射文件方式的文件读写

package nio;

import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.file.OpenOption;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

//使用内存映射文件的方式
//加速输入输出流的传递
//使用1.7以后的新的创建管道的方式
public class testMapChannel {
    public static void main(String[] a){
        try {
            //获取文件的channel,并且以读的模式
            FileChannel fileChannel = FileChannel.open(Paths.get("e:/11.txt"), StandardOpenOption.READ);
            //获取文件的channel,以写的模式
            FileChannel fileChannel1 = FileChannel.open(Paths.get("e://33.txt"),StandardOpenOption.WRITE,StandardOpenOption.CREATE);

            //使用内存映射文件的方式,基于channel的传输完成文件的读写操作
            fileChannel.transferTo(0,fileChannel.size(),fileChannel1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

基于内存映射文件的方式,文件的读写完全由os来操作,因此会存在不稳定性,应在特定的场合选择使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值