首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteArrayOutputStream.toByteArray()性能

ByteArrayOutputStream.toByteArray()性能
EN

Stack Overflow用户
提问于 2014-02-27 16:07:03
回答 3查看 4.3K关注 0票数 0

我正在将poi工作簿写入ByteArrayOutputStream,以便获取字节并将它们发送到soap消息中。

获取ByteArrayOutputStream是可以的,但是调用.toByteArray()非常慢,占用了大量的cpu。

我试图转换的工作簿非常大。

有人对我如何加快速度有什么建议吗?

谢谢你,杰森

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-27 16:16:00

在创建ByteArrayOutputStream对象时,是否声明了缓冲区大小?如果不是,您将花费时间来展开缓冲区,并在每次扩展时复制字节。设置构造函数中所需的最终大小,您将看到大型文件的速度有所提高。

来自Oracle文档:构造函数和描述

代码语言:javascript
复制
ByteArrayOutputStream()

创建一个新的字节数组输出流。

代码语言:javascript
复制
ByteArrayOutputStream(int size)

创建具有指定大小的缓冲区容量的新字节数组输出流(以字节为单位)。

票数 4
EN

Stack Overflow用户

发布于 2014-02-27 16:55:08

ByteArrayOutputStream#toByteArray()正在执行的唯一密集任务是将字节从内部流缓冲区复制到新的字节数组中。

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

票数 2
EN

Stack Overflow用户

发布于 2018-03-01 08:51:55

还可以考虑一下弹簧芯FastByteArrayOutputStream

它不会在增长时复制字节,并且还允许通过toByteArrayUnsafe()getInputStream()方法使用字节而不进行复制。

请注意,toByteArrayUnsafe()将避免仅在initialBlockSize对整个数据足够的情况下进行复制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22073949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档