MappedByteBuffer 存储long

Posted arax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MappedByteBuffer 存储long相关的知识,希望对你有一定的参考价值。

val folder = TemporaryFolder()
folder.create()
val file = folder.newFile("test.dat")
// 创建一个20字节容量的MappedByteBuffer
val buffer = RandomAccessFile(file,"rw")
        .channel.map(FileChannel.MapMode.READ_WRITE,0,20)

val lv = 0x1122334455667788L
val vl = 0x1020304050607080L

buffer.putLong(lv)  // 存储第一个long
buffer.putLong(vl)  // 存储第二个long
buffer.force()      // 将数据存储到磁盘
Assert.assertEquals(0x11.toByte(),buffer.get(0))  // 读取第一个字节
Assert.assertEquals(0x3344.toShort(),buffer.getShort(2))  // 读取一个short

Assert.assertEquals(0x10.toByte(),buffer.get(8))    // 读取第二个long的第一个字节
Assert.assertEquals(0x3040.toShort(),buffer.getShort(10)) // 读取第二个long的一个short

从上面的测试代码可以看出MappedByteBuffer存储long时,从long的最高位字节开始存储的,这和我们的书写数字的很类似。所以在操作MappedByteBuffer时要注意这一点。

以上是关于MappedByteBuffer 存储long的主要内容,如果未能解决你的问题,请参考以下文章

MappedByteBuffer

Java NIO - MappedByteBuffer 的截断

如何正确关闭 MappedByteBuffer?

MappedByteBuffer - BufferOverflowException

Java MappedByteBuffer.isLoaded()

MappedByteBuffer的实际开发遇到的问题