gpt4 book ai didi

java - 在 Java 中使用 ByteBuffer 处理交错读/写的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 16:30:14 25 4
gpt4 key购买 nike

已编辑:使问题不再“基于意见”

我想询问在交错读/写的情况下使用字节缓冲区的建议方法。

我的程序处理执行 read() 的 NIO 随机序列和write()操作到ByteBuffer 。目前我用一个变量来记录最后一次操作是否是read()write() ,并调用flip()compact()相应地。

这是最好的方法还是 ByteBuffer 不适合处理此任务?

<小时/>

原问题标题:Java ByteBuffer 设计不好吗?

我刚刚开始使用 Java NIO,我认为 Bytebuffer 的设计方式使得交错读/写操作难以实现。这样的操作模式正是我们在 NIO 中设置“缓冲区”的原因。

具体来说,flip()compact()对于编程来说是不必要的细节。如果我有一个随机序列 read()write()到一个字节缓冲区,那么我别无选择,只能保留一个单独的变量来跟踪缓冲区是否已被“翻转”。例如,对于翻转的缓冲区,我需要 compact()之前write再次,但我不能对未翻转的缓冲区这样做。

IMO,几乎没有write()的情况关注read()无需调用compact()clear()第一的。另外,没有read()之后write()没有flip() ,所以我认为应该这样做:

  • 明确“读取模式”和“写入模式”,并在读取模式下写入时抛出警告,反之亦然。使用显式 readMode()writeMode()命令进行切换。
  • 通过采用不同的设计(例如循环缓冲区)或在读/写中隐式实现读/写之前无需翻转/压缩。

由于我对 Java 还很陌生,我想知道我的投诉是否合法,或者在实现 Bytebuffer 时进行了一些仔细的设计选择?

最佳答案

非常感谢用户207421的回答。他提出了一个很棒的解决方案,我现在正在我的设计中采用。

基本上,您始终保留 ByteBuffer每次操作后都处于相同的状态。

例如,保留 ByteBuffer在未翻转状态下,则每 write()操作应该用 flip() 包裹起来和compact()之前和之后。另外,添加同步来处理线程。

关于java - 在 Java 中使用 ByteBuffer 处理交错读/写的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62057068/

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