在Android中序列化/反序列化图像的最佳方法

时间:2012-02-09 21:24:48

标签: android image serialization deserialization

我正在尝试在Android中保留图片。我最终决定创建一个包装器对象来处理序列化。我希望它不是最佳的。

我的问题:如何才能做得更好(特别是在性能方面,不会因多个序列化而导致图像质量下降)?

public class SerializableImage implements Serializable {

private static final long serialVersionUID = 1L;

private static final int NO_IMAGE = -1;

private Bitmap image;

public Bitmap getImage() {
    return image;
}

public void setImage(Bitmap image) {
    this.image = image;
}

private void writeObject(ObjectOutputStream out) throws IOException {
    if (image != null) {
        final ByteArrayOutputStream stream = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.PNG, 100, stream);
        final byte[] imageByteArray = stream.toByteArray();
        out.writeInt(imageByteArray.length);
        out.write(imageByteArray);
    } else {
        out.writeInt(NO_IMAGE);
    }
}

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{

    final int length = in.readInt();

    if (length != NO_IMAGE) {
        final byte[] imageByteArray = new byte[length];
        in.readFully(imageByteArray);
        image = BitmapFactory.decodeByteArray(imageByteArray, 0, length);
    }
}
}

1 个答案:

答案 0 :(得分:1)

由于PNG是无损格式,因此质量不应降低。你应该注意的不是你如何在文件中写入/读取图像,而是你经常这样做。我发现使用弱引用创建内存缓存大大减少了IO调用。另请注意,即使您让系统垃圾收集旧映像,这些映像也会在本机代码中缓存较长时间。唯一可以帮助您处理此问题的调用是调用Bitmap.recycle