Cómo serializar un objeto que incluye imágenes Buffered

Intento crear un progtwig simple de edición de imágenes en java. Hice un objeto ImageCanvas que tiene toda la información sobre la imagen que se está editando (algunas propiedades básicas, lista de efectos que se aplican, una lista de capas BufferedImage , etc.) y quería una manera simple de guardarlo en el disco para que podría abrirse más tarde.

Pensé que el uso de la interfaz Serializable Java podría ser exactamente lo que estaba buscando y podría simplemente escribir todo el objeto en un archivo y volver a leerlo en la memoria más adelante. Sin embargo, ImageCanvas incluye una ArrayList , y las de BufferedImage no son serializables (todo lo demás).

Sé que es posible anular los writeObject() y readObject() , pero nunca lo hice y me preguntaba si hay alguna manera fácil de hacer que Java serialice todo lo demás y tenga alguna forma personalizada de leer / escribir la imagen BufferedImage Está en el disco? ¿O hay alguna otra forma de escribir fácilmente todo el objeto ImageCanvas en el disco que estoy pasando por alto? Eventualmente podría implementar mi propio tipo de archivo de imagen personalizado, pero por ahora quería una manera rápida y fácil de guardar archivos temporalmente mientras estoy realizando la prueba (la clase ImageCanvas cambiará mucho, así que no quería tener que seguir actualizando) mi tipo de archivo personalizado antes de finalizarlo).

haga transitoria su ArrayList e implemente un writeObject() personalizado writeObject() . En esto, escriba los datos regulares para su ImageCanvas, luego escriba manualmente los datos de bytes para las imágenes, usando el formato PNG.

 class ImageCanvas implements Serializable { transient List images; private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeInt(images.size()); // how many images are serialized? for (BufferedImage eachImage : images) { ImageIO.write(eachImage, "png", out); // png is lossless } } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); final int imageCount = in.readInt(); images = new ArrayList(imageCount); for (int i=0; i 

La serialización es bastante sencilla ya que persiste en los datos estáticos. De lo contrario, está en el lugar correcto con el objeto de lectura / escritura en la familia de métodos de serialización. Piensa en lo que es una “Imagen Buffered”. Es una implementación de transmisión en búfer. Para serializar, los datos deben ser vaciados a un objeto estático como una matriz de bytes [] y luego ESE objeto puede ser serializado / deserializado dentro / fuera de una Imagen Buffered de modo que la transmisión en búfer ahora entra / sale de esa matriz de bytes [] .