Java如何使用FileChannel将数据读入缓冲区?

下面的示例演示如何使用FileChannel将某些数据读入Buffer。我们从FileInputStream实例创建一个FileChannel。由于通道将数据读入缓冲区,因此我们需要创建一个ByteBuffer并设置其容量。使用FileChannel.read()方法将数据从通道读取到缓冲区中。

要从缓冲区中读取数据,我们需要先使用Buffer.flip()方法翻转缓冲区。该方法会将缓冲区从写入模式更改为读取模式。读取整个缓冲区后,使用clear()方法调用清除缓冲区。

package org.nhooo.example.io;

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

public class FileRead {
    public static void main(String[] args) {
        String path = "D:/Temp/source.txt";
        try (FileInputStream fis = new FileInputStream(path); 
             FileChannel fileChannel = fis.getChannel()) {

            ByteBuffer buffer = ByteBuffer.allocate(64);

            int bytesRead = fileChannel.read(buffer);
            while (bytesRead != -1) {
                buffer.flip();

                while (buffer.hasRemaining()) {
                    System.out.print((char) buffer.get());
                }

                buffer.clear();
                bytesRead = fileChannel.read(buffer);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}