Java中可用的最大可调整大小的字节缓冲区是什么?

时间:2011-06-13 10:42:21

标签: java

我需要Java中的字节缓冲区类用于单线程使用。缓冲区应该在它满时调整大小,而不是抛出异常或其他东西。对我来说非常重要的问题是表现。

你会推荐什么?

增加: 在我使用ByteBuffer,但它不能调整大小。我需要一个可以调整大小。

3 个答案:

答案 0 :(得分:9)

有什么理由不使用无聊的普通ByteArrayOutputStream

正如上面的miku所提到的,Evan Jones gives a review of different types并表明它非常依赖于应用程序。因此,在不了解更多细节的情况下,很难推测。

我将从ByteArrayOutputStream开始,并且只有在分析显示它是你的性能瓶颈转移到其他东西时。通常当您认为缓冲区代码是瓶颈时,它实际上将是网络或其他IO - 等到分析显示您需要优化之后才浪费时间寻找替代品。

如果您正在转向别的事情,那么您需要考虑其他因素:

  • 您说您使用的是单线程使用,因此不需要BAOS的同步
  • 什么是填充和输入的缓冲区?如果已经连接任何一端使用Java NIO,那么使用直接ByteBuffer非常有效。
  • 您使用的是循环缓冲区还是普通的线性缓冲区?如果你是Ostermiller Utils非常有效,那么GPL

答案 1 :(得分:2)

您可以使用直接的ByteBuffer。直接内存使用虚拟内存开始时仅在使用时分配给应用程序。即它使用的主存储量自动重新调整大小。

创建一个比你需要的更大的直接ByteBuffer,它只会消耗你使用的东西。

答案 2 :(得分:2)

你也可以编写用于连续检查缓冲区内容的手动代码,如果它是真实的,那么创建一个更大的新缓冲区并移动新缓冲区中的所有数据。