gpt4 book ai didi

java - 是否有允许动态增长并扩展 java.nio.ByteBuffer 的 ByteBuffer 实现?

转载 作者:行者123 更新时间:2023-11-30 05:35:58 26 4
gpt4 key购买 nike

我的代码中有一个 java.nio.ByteBuffer:

ByteBuffer bb = ByteBuffer.allocateDirect(1024);
...

我希望能够将其替换为 ByteBuffer 的新实现(即它必须扩展 java.nio.ByteBuffer),以便它能够在幕后重新分配、复制和丢弃之前的小 ByteBuffer ,以实现无缝动态增长。

我不能只拥有一个包装器,因为它必须是一个 java.nio.ByteBuffer

它必须是这样的:

ByteBuffer bb = new MyImplementationOfByteBufferThatExtendsByteBuffer(1024);

有人见过或做过吗?可能吗?

只是想注意,如果 java.nio.ByteBuffer 是一个接口(interface)而不是抽象类,那么实现起来就会很简单。就像老话所说,如果你想要灵 active ,优先选择接口(interface)而不是抽象类

最佳答案

不,这不存在,并且如果不违反 ByteBuffer 父类(super class) Buffer 的约定,不可能存在:

A buffer is a linear, finite sequence of elements of a specific primitive type. Aside from its content, the essential properties of a buffer are its capacity, limit, and position:

  • A buffer's capacity is the number of elements it contains. The capacity of a buffer is never negative and never changes.

因此,如果允许“无缝动态增长”,ByteBuffer 将不再充当 Buffer。无论接口(interface)还是抽象类都是如此:子类和接口(interface)实现都不应破坏它们扩展的类中定义的不变量。毕竟,HypotheticalGrowingByteBuffer 的使用者可能依赖 Buffer 的固定容量来缓存对 capacity() 的单个调用,否则该容量将被定义为不更改。

使 ByteBuffer 成为抽象类而不是接口(interface)的另一个插入因素:支持缓冲区的内存被定义为必须是固定且连续的,这比更灵活的定义具有更高的性能。

也就是说,Buffer 定义了一个可变的 limit 概念,其中最初分配的大型缓冲区可能会人为地限制其可用性。您可以使用它来限制大缓冲区从小处开始然后增长,尽管增长不会是“无缝”的;它将受到您定义的原始缓冲区容量的限制。如果目标只是连接较小的固定大小缓冲区,其中总体大小是可预测的,则可能值得使用 ByteBuffer.duplicate 将它们生成为较大缓冲区的片段。并设置标记限制来限制可写区域。

关于java - 是否有允许动态增长并扩展 java.nio.ByteBuffer 的 ByteBuffer 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com