博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
直接缓冲区
阅读量:2164 次
发布时间:2019-05-01

本文共 945 字,大约阅读时间需要 3 分钟。

直接缓冲区是为加快I/O 速度,使用一种特殊方式为其分配内存的缓冲区,JDK 文档中的描述为:给定一个直接字节缓冲区,Java虚拟机将尽最大努力直接对它执行本机I/O 操作。也就是说,它会在每一次调用底层操作系统的本机I/O 操作之前(或之后),尝试避免将缓冲区的内容拷贝到一个中间缓冲区中或者从一个中间缓冲区中拷贝数据。要分配直接缓冲区,需要调用allocateDirect()方法,而不是allocate()方法,使用方式与普通缓冲区并无区别,如下面的拷贝文件示例:

import java.io.*;import java.nio.*;import java.nio.channels.*;/*** 直接缓冲区*/public class DirectBuffer {	static public void main( String args[] ) throws Exception {		//首先我们从磁盘上读取刚才我们写出的文件内容		String infile = "E://test.txt";		FileInputStream fin = new FileInputStream( infile );		FileChannel fcin = fin.getChannel();		//把刚刚读取的内容写入到一个新的文件中		String outfile = String.format("E://testcopy.txt");		FileOutputStream fout = new FileOutputStream( outfile );		FileChannel fcout = fout.getChannel();		// 使用allocateDirect,而不是allocate		ByteBuffer buffer = ByteBuffer.allocateDirect(1024);		while (true) {			buffer.clear();			int r = fcin.read(buffer);			if (r==-1) {				break;			}			buffer.flip();			fcout.write(buffer);		}	}}

 

转载地址:http://mvbzb.baihongyu.com/

你可能感兴趣的文章
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>