[另一个字节缓冲区的Java NIO字节缓冲区子视图

问题描述 投票:0回答:1

是否有任何方法可以通过Java API,某些现有库或某些Kotlin stdlib或Kotlin库获取显示另一个ByteBuffer子视图的NIO ByteBuffer

例如,假设我有一个名为ByteBuffer的1024个元素bb1,我要查看其视图bb2,该视图仅包含bb1的后半部分。即bb2的元素0对应于bbq的元素512,并且bb2的容量为512。bb2应该不能访问bb1的前半部分,并且客户端代码应该能够使用bb2就像是完全独立的ByteBuffer,容量为512,而不是知道它是较大ByteBuffer的子视图。

我也接受使用kotlinx-io IoBuffer进行此操作的某种方式。

谢谢。

java kotlin io nio bytebuffer
1个回答
0
投票

如果您使用的是Java 13+,则可以使用ByteBuffer#slice(int,int)

创建一个新的字节缓冲区,其内容是该缓冲区内容的共享子序列。

新缓冲区的内容将从此缓冲区的位置ByteBuffer#slice(int,int)开始,并将包含index元素。对该缓冲区内容的更改将在新缓冲区中可见,反之亦然;这两个缓冲区的位置,限制和标记值将是独立的。

新缓冲区的位置将为零,其容量和限制将为length,其标记将是未定义的,其字节顺序将为length。当且仅当该缓冲区是直接缓冲区时,新缓冲区才是直接缓冲区;当且仅当该缓冲区是只读缓冲区时,新缓冲区才是只读缓冲区。

如果您使用的是Java的较旧版本,或者希望根据原始缓冲区的位置和限制进行切片,则可以使用BIG_ENDIAN

创建一个新的字节缓冲区,其内容是该缓冲区内容的共享子序列。

新缓冲区的内容将从该缓冲区的当前位置开始。对该缓冲区内容的更改将在新缓冲区中可见,反之亦然;这两个缓冲区的位置,限制和标记值将是独立的。

新缓冲区的位置将为零,其容量和限制将是此缓冲区中剩余的字节数,其标记将是未定义的,其字节顺序将为ByteBuffer#slice()。当且仅当该缓冲区是直接缓冲区时,新缓冲区才是直接缓冲区;当且仅当该缓冲区是只读缓冲区时,新缓冲区才是只读缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.