我想请教一下,在交错读写的情况下,使用字节缓冲区的建议性方法。
我的程序处理了一个随机序列的NIO,该NIO执行了 read()
和 write()
运作到 ByteBuffer
. 目前,我使用一个变量来记录最后的操作是否是 read()
或 write()
呼叫 flip()
或 compact()
相应的。
这是最好的方法还是ByteBuffer不是用来处理这个任务的?
原问题标题 Java ByteBuffer设计得不好吗?
我刚刚开始使用Java NIO,我认为Bytebuffer的设计方式使得 夹层 读写操作难以实现。凡是这样的操作模式正是我们在NIO中设置 "缓冲区 "的原因。
具体来说,就是 flip()
和 compact()
是编程中不必要的细节。如果我有一个随机序列的 read()
和 write()
到一个字节缓冲区,那么我别无选择,只能保留一个单独的变量来跟踪缓冲区是否被 "翻转"。例如,对于一个被翻转的缓冲区,我需要用 compact()
其前 write
但我不能对一个未翻转的缓冲区进行这样的操作。
我认为,几乎没有任何情况下,一个 write()
下面 read()
不用打电话 compact()
或 clear()
先是。另外,没有 read()
之后 write()
是没有 flip()
所以,我认为两者都应该做。
readMode()
或 writeMode()
命令来切换。由于我对Java还很陌生,我想知道我的抱怨是合法的,还是在实现Bytebuffer时有一些精心的设计选择?
非常感谢用户207421的回答。他提出了一个很好的解决方案,我现在在设计中也采用了。
基本上,你总是保持 ByteBuffer
在每次操作后都处于相同的状态。
例如,为了保持 ByteBuffer
处于非翻转状态,那么每 write()
操作时应使用 flip()
和 compact()
前后。另外,增加同步处理线程。