Nio文件的读写

本文探讨了在使用NIO进行文件读写时,如果不使用clear方法会导致的死循环问题。分析指出,当第一次read后,position等于limit,接着flip使position归零但limit不变,导致buffer内容不断被写入文件,而由于position始终等于limit,read方法返回0,循环无法正常退出。因此,clear方法对于避免这种无限循环至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体思路:打开一个文件,把文件以字节读到buffer中,再把buffer进行一次flip,就可以把buffer写入到一个文件中了。如果没有clear方法会产生死循环,一直把buffer读到文件中。

不写clear方法分析:第一次read之后position等于limit,read等于buffer字节数,flip之后,position为0,limit不变,把buffer读进文件中,position等于limit。再次循环,因为position等于limit,所以读取数量为0,所以read等于0,循环不跳出,flip之后,position为0,再次把buffer读进文件。read一直为0,循环不退出
package com.wave.NioTest;

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

public class NioTest {
    public static void main(String[] args) throws Exception{
        FileInputStream fileInputStream = new FileInputStream("input.txt");
        FileOutputStream fileOutputStream = new FileOutputStream("output.txt");

        FileChannel inputChannel = fileInputStream.getChannel();
        FileChannel outputChannel = fileOutputStream.getChannel();

        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

        while(true){
            byteBuffer.clear();

            int read = inputChannel.read(byteBuffer);

            if(read == -1){
                break;
            }

            byteBuffer.flip();

            outputChannel.write(byteBuffer);
        }
        inputChannel.close();
        outputChannel.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值