`
lengyingxin
  • 浏览: 57388 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java的内存映射--MappedByteBuffer

 
阅读更多
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;


public class MapFileDemo {

/**
*    对于大多数操作系统而言,与通过普通的 read 和 write 方法读取或写入数千字节的数据相比,
*    将文件映射到内存中开销更大。从性能的观点来看,通常将相对较大的文件映射到内存中才是
*    值得的,但是不是越大越好,在超过了相对了内存大小的一定比例之后会抛出异常。
     *    MappedByteBuffer直接字节缓冲区,其内容是文件的内存映射区域。映射的字节缓冲区是通过
     *     FileChannel.map 方法创建的.
*/
public static void main(String[] args) throws FileNotFoundException,IOException {
       
MappedByteBuffer mapFile = new RandomAccessFile("D://text.txt", "rw")
       .getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 1000000);


Long startTime = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++ ){
mapFile.put((byte)('i'+i));
}
System.out.println("Memory reflect finish!");
for(int i = 0; i < 1000000; i++){
mapFile.get(i);
}
Long endTime = System.currentTimeMillis();
        System.out.println("the spend time is: " + (endTime-startTime));
       
使用内存映射的方式进行读写所消耗的时间是:  the spend time is: 31


// RandomAccessFile rf = new RandomAccessFile("D://text1.txt", "rw");
// Long startTime = System.currentTimeMillis();
// for(int i = 0; i < 1000000; i++ )
// rf.write('i'+i);
//
// for(int j = 0; j < 1000000; j++ ){
// rf.read();
//
// }
//
// Long endTime = System.currentTimeMillis();
// System.out.println("the spend time is: " + (endTime-startTime));
使用RandomAccessFile操作消耗的时间:the spend time is: 7956


        File file = new File("D://t1.txt");
        FileInputStream fi = new FileInputStream(file);
        FileOutputStream fo = new FileOutputStream(file);
        Long startTime = System.currentTimeMillis();
        for(int i = 0; i < 1000000; i++ ){
        fo.write((byte)('b'+i));
}
        for(int i = 0; i < 1000000; i++){
fi.read();
}
Long endTime = System.currentTimeMillis();
        System.out.println("the spend time is: " + (endTime-startTime));
使用普通的IO操作消耗的时间是:the spend time is: 8093
}

}
0
4
分享到:
评论

相关推荐

    commons-mmf.rar_java nio_java共享内存_共享内存

    java的共享内存管理.基于MMF设计。封装了java.nio.MappedByteBuffer.在大流量实时业务系统时,可以极大的提高处理效率

    javaredis源码-jredis-master:java实现redis

    java redis源码杰里迪斯 Java的redis实现,与redis服务器相同。 特征 ...MappedByteBuffer 2.fixed unit size ,head 4 byte write in last item position, and then each item write in 4 byte with i

    java8源码-netty-learn:这是一个用于netty学习的工程

    java8 源码 netty-learn 这是一个用于netty学习的工程 ##NIO基础 三大组件 Channel & Buffer channel有点类似于stream,它就是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer中的数据写入到...

    mmfinvoker:简单的进程间 java 请求-响应库

    mmfinvoker 这是一个简单的 java 库,它使用 nio.MappedByteBuffer 在内存映射文件上实现请求/响应功能。

    深入浅出MappedByteBuffer.pdf

    深入浅出MappedByteBuffer

    百度地图开发java源码-inertiaSearch:挑战赛

    百度地图开发java源码 tmp #inertiaSearch 2016年写的代码,现在觉得思路有很多提升的地方,但是毕竟努力过,还是贴在Readme.md 里面 ...对于原始的数据文件做内存映射,并做对应索引,所有索引做hash

    mmf4j:MemoryMappedFiles4Java

    该库旨在将内存映射文件引入Java。 与已经存在的MappedByteBuffer相比,目标是更好地控制创建,修改和销毁。 它试图统一在不同操作系统上使用此类映射的接口,这意味着许多细节无法实现。 此外,在某些情况下,您...

    jdk-14_linux-x64_bin.rpm

    非易失性映射的字节缓冲将添加新的 JDK 特定文件映射模式,该模式允许 FileChannel API 用于创建引用非易失性内存(NVM)的 MappedByteBuffer 实例。 358:Helpful NullPointerExceptions 改进 ...

    Bug ID 4724038 (fs) Add unmap method to MappedByteBuffer

    Bug ID 4724038 (fs) Add unmap method to MappedByteBuffer

    j2se项目源码及介绍_last指令

    返回说明 @return MappedByteBuffer 内存映射缓冲。 异常说明 throws 考虑异常 流程原理 调用实例 函数原型 private void readLog(MappedByteBuffer buffer, Vector&lt;LogRecord&gt; logins,Vector&lt;LogRecord&gt; ...

    读取文件数据并解析成bean实体类

    很多时候需要文件做数据交互,接收到文件后需要对文件解析成bean实体类,这里提供的是工具类,任意文件转任意实体都可以,只要简单的配置一下Class类,很实用

    ip地址库 很全的库

    // 内存映射文件 private MappedByteBuffer mbb; // 单一模式实例 private static volatile IPSeeker instance = null; // 起始地区的开始和结束的绝对偏移 private long ipBegin, ipEnd; // 为提高...

    Android渠道打包工具packer-ng-plugin.zip

    }读取ZIP文件注释,有两个版本的实现,这里使用的是 RandomAccessFile ,另一个版本使用的是 MappedByteBuffer ,经过测试,对于特别长的注释,使用内存映射文件读取性能要稍微好一些,对于特别短的注释(比如渠道名...

    txt文档阅读器

    //MappedByteBuffer 将文件直接映射到内存 private int m_mbBufLen = 0; private int m_mbBufBegin = 0; private int m_mbBufEnd = 0; private String m_strCharsetName = "gbk";//文本格式 private Bitmap m_...

    【密码:5261】Oracle官网下载64位-JDK14

    jdk14新特性:改进NullPointerExceptions,通过准确描述哪些变量为null...非易失性映射的字节缓冲将添加新的JDK特定文件映射模式,该模式允许FileChannel API用于创建引用非易失性内存(NVM)的MappedByteBuffer实例。

    文件分割和合并(您的文件大的不能传输怎么办?)

    本人初学c++,写了一个小软件,能把大文件分割问小文件,然后可以统国网络传输,到了网络另一端,再用此软件拼接! 希望用过的人能提宝贵意见! 13521825644 qq 362192302

    sambox:一个PDFBox分支,打算用作Sejda和PDFsam的PDF处理程序

    SAMBox使用允许使用基于java.nio.channels.FileChannel , java.io.InputStream和java.nio.MappedByteBuffer的提供的实现之一(是否缓冲)。 通过使用java.lang.StringBuilder池最小化GC。 通过绑定视图的概念直接...

    Android代码-BitMap

    a pratise of bigdata sorting,use some common util or class,like File,FileOutputStream,RandomAccessFile,HashMap,BufferedOutputStream,ByteBuffer,MappedByteBuffer,FileInputStream. as a newer of ...

    CsvReader:CsvReader

    the performance improvement is not so much as against using MappedByteBuffer. -&gt; Otherwise I will totally use MappedByteBuffer 我无法在symbol.txt上进行验证。 单元测试:我找不到足够的时间来运行所有...

Global site tag (gtag.js) - Google Analytics