问题描述
|
我需要Java中的字节缓冲区类供单线程使用。缓冲区已满时应调整大小,而不是抛出异常或其他内容。对我来说,非常重要的问题是性能。
你会推荐什么?
添加:
暂时我使用ByteBuffer,但是它无法调整大小。我需要一个可以调整大小的工具。
解决方法
有什么理由不使用无聊的普通ByteArrayOutputStream吗?
如上文miku所述,Evan Jones给出了不同类型的评论,并表明它非常依赖于应用程序。因此,在不知道更多细节的情况下很难推测。
我将从ByteArrayOutputStream开始,只有在分析显示这是您的性能瓶颈转移到其他地方时,才开始。通常,当您认为缓冲区代码是瓶颈时,它实际上是网络或其他IO-等到性能分析表明您需要优化后再浪费时间寻找替代物。
如果您要迁移到其他地方,则需要考虑其他因素:
您已经说过您正在使用单线程使用,所以不需要BAOS的同步
填充并注入的缓冲区是什么?如果任一端已经连接使用Java NIO,则使用直接ByteBuffer非常有效。
您使用的是圆形缓冲区还是普通的线性缓冲区?如果您是,那么Ostermiller实用程序将非常高效,并且GPL
, 您可以使用直接的ByteBuffer。直接内存使用虚拟内存开始,仅在使用虚拟内存时才分配给该应用程序。即它使用的主内存量会自动调整大小。
创建一个大于您所需的直接ByteBuffer,它将仅消耗您使用的内容。
, 您还可以编写手动代码来连续检查缓冲区内容,如果缓冲区内容已满,则制作一个更大的新缓冲区并将所有数据移入该新缓冲区。