将BufferedImage转换为

将BufferedImage转换为

我需要将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 IOorg.apache.commons.io.output.ByteArrayOutputStream)中找到更快的实现
根据图像的大小,ByteArrayOutputStream的分配算法可能会出现问题。从1或10 KiB的初始大小开始。
toByteArray()为您提供现有缓冲区的副本。如果不需要(通常不需要),则编写自己的OutputStream可能会进一步提高速度(更不用说避免运行GC)

关于java - 如何快速将BufferedImage转换为byte []?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11970736/

10-09 01:58