[OpenJDK 2D-Dev] Why are java images type not serializable ?

Jim Graham james.graham at oracle.com
Tue Mar 10 18:37:44 UTC 2015


Serializing images by content is generally wasteful in terms of the size 
of the data stream.

For images loaded from a URL or file, presumably those can be reloaded 
by the application if it has a way to retrigger loading its resources (a 
common technique is to lazily load some images or have a central method 
for loading media - both of which are easy to trigger in the process of 
deserializing).

For images that are generated on the fly, often those can be regenerated 
by the code, but it may not be as automatic as lazily reloading an image 
from its file/URL.

One issue is that images may be loaded from a cache and multiple 
references stored throughout the program (particularly for images used 
as common UI elements).  I suppose that a well-written serialization 
mechanism may notice the repeated references and try to share the 
serialized forms, but I'm not entirely sure how that works or how that 
would impact serializing the images.

There is also the issue that BufferedImages can be fully custom, which 
means that we have no idea how the pixels are stored or where they are 
stored.  The fact that ColorModel, SampleModel, and Raster are openly 
subclassable allows for such completely custom implementations.  We 
could not guarantee serializability of custom subclasses of any of 
those, unfortunately...

			...jim

On 3/10/15 10:20 AM, Jean-François Savard wrote:
> Hi,
>
> I've realized java.awt.image.BufferedImage is not serializable.
>
> After a couple of research, I've realized that each java image types
> (correct me if I'm wrong) are not serializable at all.
>
> I've then decided to do research without specifying java as language and
> realized serialization of image is not present in most of the languages.
> I've come to the conclusion that is simply because serializing an image
> is illogical. When you load an image, it is because you already have the
> resource stored somewhere (file or in-memory), so there is no point in
> serializing it as the main utility of serialization is to store data
> independent of the JVM, which is already the case for an image file. For
> the case where the image is in-memory, it mean you already loaded the
> ressource and have the byte array so it is better to simply serialize
> that byte array.
>
> Would you please confirm that my understanding is correct ?
>
> Best regards.



More information about the 2d-dev mailing list