应该包含什么状态包含ByteBuffers?

时间:2015-11-18 20:54:37

标签: java io nio bytebuffer

我无法理解Java NIO的缓冲区的实际方面。

NIO提供了一系列类型的缓冲区,它们通过ByteBuffer(即CharBuffer,IntBuffer,DoubleBuffer等)提供面向数据的视图。

从后备缓冲区返回其中一个类型化缓冲区视图时,返回的缓冲区所处的首选状态(或者对调用者来说最不令人惊讶的状态)是什么? E.g:

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;
    }
}

是否应设置为&#34;写入模式&#34;?即按原样保留位置,设置容量限制?

是否应设置为&#34;读取模式&#34;?即保持限制,将位置设为0?

是否应该以&#34; full&#34;?即设置限制容量,位置为0?

最好的方法是什么,如果另外,我可以假设缓冲区总是满的,但是想要方便随机访问内容?

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

谢谢!

1 个答案:

答案 0 :(得分:1)

我总是把它准备好读取(我总是在内部保留它们,除了在代码中清晰可见的非常短的翻转/写入/紧凑或翻转/获取/紧凑序列:我总是做紧凑的在最后一个街区)。

我没有理由将其显示为已满,但如果您在返回之前将数据放入其中,则可以考虑将其返回,就像ByteBuffer.wrap()那样。但我并不同意这种做法。如果您这样做,请确保记录下来。