先在1024个字节的缓冲区内存储读取的数据,当超过这个size时统一输出。
//使用NOI输出
public static void fileNIOChannel() throws IOException {
//创建一个File实例
File file = new File("D:\\test.out");
//FileInputStream为文件输入流
FileInputStream in = new FileInputStream(file);
//缓冲器向通道输入数据
FileChannel fileChannel = in.getChannel();
//创建一个容量为1024字节的ByteBuffer
ByteBuffer buf = ByteBuffer.allocate(1024);
//写入数据到Buffer
int bytesRead = fileChannel.read(buf);
while(bytesRead != -1)
{
//回绕缓冲区(输出通道会从数据的开头而不是末尾开始)
buf.flip();
while(buf.hasRemaining())
{
System.out.print((char)buf.get());
}
/**
* 压缩此缓冲区,compact方法会执行两个动作
* 1.清除之前写好的字符
* 2.通过标记位置为0
* 这就为什么要结合filp()使用
*/
buf.compact();
//写入数据到Buffer
bytesRead = fileChannel.read(buf);
}
}
网友评论