gpt4 book ai didi

java - 包装的 ByteBuffers 应该返回什么状态?

转载 作者:行者123 更新时间:2023-11-30 10:54:04 24 4
gpt4 key购买 nike

我在摸索 Java NIO 缓冲区的实际方面时遇到了麻烦。

NIO 提供了一系列类型化缓冲区,它们在 ByteBuffer 上呈现面向数据的 View (即 CharBuffer、IntBuffer、DoubleBuffer 等)。

当从后备缓冲区返回这些类型化缓冲区 View 之一时,返回缓冲区的最佳状态是什么(或者对于调用者来说最不令人惊讶的状态)是什么?例如:

class Data<T> {
ByteBuffer buffer;

abstract T getData()
}

class CharData extends Data<CharBuffer> {

CharBuffer getData() {
CharBuffer charBuffer = buffer.asCharBuffer();
// Should I adjust something here before returning?
return charBuffer;
}
}

是否应该设置为“写入模式”? IE。保持原样,限制容量?

是否应该设置为“阅读模式”? IE。保持原样,将位置设置为 0?

它应该显示为“完整”吗? IE。设置容量限制,位置为 0?

如果我可以假设缓冲区总是满的,但又想促进对内容的随机访问,那么最好的方法是什么?

我敢肯定,对于经验丰富的 IO 程序员来说,这是一个微不足道的问题,但在遇到一些使用缓冲区的奇怪陷阱后,我决定来这里问问人们的想法。

谢谢!

最佳答案

我总是将它返回以供阅读(并且我总是在内部保持这种方式,除了在代码中清晰可见的非常短的翻转/写入/压缩或翻转/获取/压缩序列:而且我总是执行压缩在 finally block 中)。

我认为没有理由将它呈现为完整,但如果您在返回之前将数据放入其中,您可以考虑返回它已经翻转,就像 ByteBuffer.wrap() 那样。但我并不十分认同这种做法。如果您这样做,请务必将其记录下来。

关于java - 包装的 ByteBuffers 应该返回什么状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790157/

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