java:ByteArrayOutputStream.toByteArray()的性能

我正在写一个poi工作簿到一个ByteArrayOutputStream为了获取字节,并通过肥皂消息发送它们。

获取ByteArrayOutputStream没有问题,但调用.toByteArray()非常缓慢,并占用了大量的CPU。
我试图转换的工作簿非常大。

有没有人对我如何加快速度提出任何build议?

谢谢你,杰森

你在创buildByteArrayOutputStream对象时是否声明了一个缓冲区大小? 如果没有,则需要花费时间来扩展缓冲区,并在每次扩展时复制字节。 设置构造函数所需的最终大小,你应该看到一些大文件的速度提高。

从Oracle文档:构造函数和说明

 ByteArrayOutputStream() 

创build一个新的字节数组输出stream。

 ByteArrayOutputStream(int size) 

创build一个新的字节数组输出stream,具有指定大小的缓冲区容量(以字节为单位)。

ByteArrayOutputStream#toByteArray()正在做的工作是将内部stream缓冲区中的字节复制到新的字节数组中。

我相信你不需要这样做,因为你将这些字节发送到SOAP。 您应该使用ByteArrayOutputStream#writeTo(OutputStream os)方法将字节stream中的字节写入您的SOAP输出stream。