Java基础-虚拟内存之映射字节缓冲区(MappedByteBuffer)

                                        作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

一.映射字节缓冲区

1>.什么是虚拟内存

  答:虚拟内存数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

2>.什么是映射字节缓冲区

  答:映射字节缓冲区,说白了就是Java将磁盘中的文件映射到内存中,然后通过修改内存的数据,从而间接修改了磁盘中的文件。这样做的目的就是为了快速对磁盘中的文件就行修改操作,将原来在磁盘上的I/O操作转换成了内存的I/O操作!

3>.Java代码案例展示

   准备文件数据如下:

Java基础-虚拟内存之映射字节缓冲区(MappedByteBuffer)

  执行以下代码:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.nio;
 7 
 8 import java.io.RandomAccessFile;
 9 import java.nio.MappedByteBuffer;
10 import java.nio.channels.FileChannel;
11 
12 public class MyMapFileBuffer {
13     public static void main(String[] args) throws Exception {
14         testMapFileBuffer();
15     }
16 
17     public static void testMapFileBuffer() throws Exception {
18         //随机访问文件
19         RandomAccessFile raf = new RandomAccessFile("D:\\BigData\\JavaSE\\yinzhengjieData\\1.txt" , "rw") ;
20         //源文件通道,由于我们的raf对象是随机访问文件,因此我们就通过它来进行读写操作。
21         FileChannel fc = raf.getChannel();
22 
23         //调用FileChannel的映射功能,指定映射模式为读写,指定映射的其实位置是0,结束位置是3(不包含3),因此我们只能修改索引为0,1,2的映射字符,如果超出映射范围就会抛异常:BufferOverflowException
24         MappedByteBuffer buf = fc.map(FileChannel.MapMode.READ_WRITE , 0 , 3) ;
25         buf.put((byte)89) ;
26         buf.put((byte)73) ;
27         buf.put((byte)78) ;
28         System.out.println("修改完成!");
29     }
30 }
31 
32 /*
33 以上代码输出结果如下:
34 修改完成!
35  */

  查看磁盘中文件内容如下:

Java基础-虚拟内存之映射字节缓冲区(MappedByteBuffer)

 

二.向文件写入10w次数据,使用RandomAccessFile方式和MappedByteBuffer方式对比性能

尹正杰
D:\BigData\JavaSE\yinzhengjieData\1.txt 文件内容戳这里

相关文章:

  • 2022-12-23
  • 2021-12-16
  • 2022-12-23
  • 2021-12-19
  • 2021-08-27
  • 2021-06-20
猜你喜欢
  • 2022-02-15
  • 2022-12-23
  • 2021-10-25
  • 2022-12-23
  • 2021-08-09
  • 2021-06-02
  • 2021-10-23
相关资源
相似解决方案