我需要一个Java字节缓冲区类,用于单线程使用。缓冲区应在满时调整大小,而不是抛出异常或其他情况。对我来说非常重要的问题是性能。
你推荐什么?
补充说明: 目前我正在使用ByteBuffer,但它无法调整大小。我需要一个可以调整大小的字节缓冲区。
我需要一个Java字节缓冲区类,用于单线程使用。缓冲区应在满时调整大小,而不是抛出异常或其他情况。对我来说非常重要的问题是性能。
你推荐什么?
补充说明: 目前我正在使用ByteBuffer,但它无法调整大小。我需要一个可以调整大小的字节缓冲区。
有没有不使用普通的ByteArrayOutputStream的原因?
正如上面的miku所提到的,Evan Jones对不同类型进行了评论并显示它非常依赖于应用程序。因此,在不知道更多细节的情况下,很难推测。
我会从ByteArrayOutputStream开始,仅当分析表明它是您的性能瓶颈时才转移到其他内容。通常,当您认为缓冲区代码是瓶颈时,它实际上是网络或其他I / O - 等到分析表明需要优化之前,不要浪费时间找到替代品。
如果您正在转移到其他内容,则需要考虑的其他因素:
您可以使用直接ByteBuffer。 直接内存首先使用虚拟内存,只有在使用时才分配给应用程序。 也就是说,它使用的主存量会自动调整大小。
创建一个比您需要的更大的直接ByteBuffer,它只会消耗您使用的部分。
您还可以编写手动代码来持续检查缓冲区内容,如果满了,则创建一个更大尺寸的新缓冲区并将所有数据移动到该新缓冲区中。