我需要将BufferedImage
转换为byte[]
,但这太慢了。该字节最终经过base64编码,然后发送到android客户端。我一直在使用的方法是这样的:
public static byte[] ImageToBytes(BufferedImage im) throws IOException
{
//make sure its NN
if(im!=null)
{
//create a ByteArrayOutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//write our image to it
ImageIO.write( im, "png", baos );
//flush the stream
baos.flush();
//get the image in byte form
byte[] imageInByte = baos.toByteArray();
//close the stream
baos.close();
//return our value encoded in base64
return imageInByte;
}
return null;
}
这对于我的程序来说太慢了。将
png
更改为jpeg
会使它在移动端失败。 JpegCodec
版本在移动端也失败。失败是指Android方法BitmapFactory.decodeByteArray()
返回null
。 最佳答案
您不必说为什么它太慢,并且没有什么可以做的来使此代码更快,因为这是将BufferedImage
转换为PNG字节流的唯一方法。但是这里有一些提示:
类ByteArrayOutputStream
是同步的,这会花费很多性能。您可以在Commons IO(org.apache.commons.io.output.ByteArrayOutputStream
)中找到更快的实现
根据图像的大小,ByteArrayOutputStream
的分配算法可能会出现问题。从1或10 KiB的初始大小开始。toByteArray()
为您提供现有缓冲区的副本。如果不需要(通常不需要),则编写自己的OutputStream
可能会进一步提高速度(更不用说避免运行GC)
关于java - 如何快速将BufferedImage转换为byte []?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11970736/