把SRTM的数据读写了一下可以用。
JAVAwindows 內存映射映射文件:
windows 内存映射映射文件能让你创建和修改那些因为太大而无法放入windows 内存映射的文件有了windows 内存映射映射文件,你就可以认為文件已经全部读进了windows 内存映射然后把它当成一个非常大的数组来访问。这种解决办法能大大简化修改文件的代码
fileChannel.map(FileChannel.MapMode mode, long position, long size)将此通道的文件区域直接映射到windows 内存映射中。注意你必须指明,它是从文件的哪个位置开始映射的映射的范围又有多大;也就是说,它还可以映射一个夶文件的某个小片断
MappedByteBuffer是ByteBuffer的子类,因此它具备了ByteBuffer的所有方法但新添了force()将缓冲区的内容强制刷新到存储设备中去、load()将存储设备中的数据加載到windows 内存映射中、isLoaded()位置windows 内存映射中的数据是否与存储设置上同步。这里只简单地演示了一下put()和get()方法除此之外,你还可以使用asCharBuffer(
)之类的方法嘚到相应基本类型数据的缓冲视图后可以方便的读写基本类型数据。
// 为了以可读可写的方式打开文件这里使用RandomAccessFile来创建文件。 //注意文件通道的可读可写要建立在文件流本身可读写的基础之上 //读取文件中间6个字节内容
尽管映射写似乎要用到FileOutputStream,但是映射文件中的所有输出 必須使用RandomAccessFile但如果只需要读时可以使用FileInputStream,写映射文件时一定要使用随机访问文件可能写时要读的原因吧。
该程序创建了一个128Mb的文件如果┅次性读到windows 内存映射可能导致windows 内存映射溢出,但这里访问好像只是一瞬间的事这是因为,真正调入windows 内存映射的只是其中的一小部分其餘部分则被放在交换文件上。这样你就可以很方便地修改超大型的文件了(最大可以到2 GB)注意,Java是调用操作系统的"文件映射机制"来提升性能嘚
版权声明:本文为博主原创文章未经博主允许不得转载。 /Timmiy/article/details/
当我们对文件进行读写操作的时候我们经常会调用ReadFile和WriteFile这两个API,但是如果我们的文件较大几百兆甚至几G且需偠时常修改值B的时候,这时那两个函数可能就不大好了这时微软提供了另外一种方法--文件映射,来使我们进行文件操作
LPBYTE pBuf = (LPBYTE)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 10); //虽然这里只映射10个字节,但是系统却并不只是映射10个字节系统会做一个跟硬盘的一个扇区大小做对齐,一般来说一个扇区为512个字节,若不够一个扇區则默认映射一个扇区,总之映射的大小为扇区大小的整数倍
//将第三个字节和第四个字节改为1和2 //将更新的内容刷新到文件中