我无法处理Java NIO的缓冲区的实际问题。ByteBuffers应该包含哪些状态?
NIO提供一系列呈现面向数据视图在字节缓冲区(即CharBuffer的,IntBuffer,双缓冲等)输入缓冲器。
当返回的从背缓冲器这些类型的缓冲视图之一,什么是优选的状态(或将显示什么作为至少令人惊讶的状态到呼叫者),用于返回的缓冲区是在?例如:
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;
}
}
是否应该设置为“写入模式”?即离开位置,设置限制容量?
如果它被设置为“阅读模式”?即离开限制,将位置设置为0?
它应该呈现为“满”?即设置容量限制,位置为0?
什么是最好的方法,如果另外,我可以假设,缓冲区将永远是满的,但要便于内容的随机访问?我敢肯定,对于更多老练的IO程序员来说,这是一个微不足道的问题,但在碰到一些使用缓冲区的怪异陷阱后,我决定来这里问问人们的想法。
谢谢!
有意详细说明最后一点?我看到将它们全部返回的原因是ByteBuffer.allocate()和ByteBuffer.wrap()的行为与此类似,所以它与通常获取缓冲区的方式有点一致......这确实倾向于暗示缓冲区是“空的”,但我打算在每次访问时读写完整的缓冲区,所以对我来说似乎是合理的......这是否意味着我可能更适合使用除ByteBuffers之外的其他功能? – gorgonzola
'allocate()'将缓冲区返回为空。 'wrap()'返回它翻转。既不返回它已满,也不应该,除非*已满。你不能读入一个完整的缓冲区,并且你不需要一个完整的缓冲区就可以从中写入。 – EJP