我需要在1个图像画板上切换显示2个图像,当前只显示其中的一副图像。因为图像文件比较大,所以我希望能够先分别从图像文件里读出图像对象,然后将其序列化保存在在硬盘上,当需要显示这幅图像时直接从硬盘上读取,这样可以保证内存里每次只有一幅图的数据,并且切换时不需要重新解码图像文件,直接读取序列化后的图像文件,用以提高2幅图的切换速度。我现在遇到的问题就是不知如何才能将包含图像数据信息的BufferedImage对象序列化,BufferedImage本身没有实现Serializable接口, BufferedImage里还包含了一些其他类对象,这些对象也没有实现Serializable接口。寻求帮助。

解决方案 »

  1.   

    BufferedImage image;
    //此处是你的BufferedImage
    //......
    //下面序列化
    FileOutputStream out=new FileOutputStream(ImgName);
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
    encoder.encode(image);
    out.close();
      

  2.   

    楼上的代码是直接保存成jpeg格式的图像文件了吧?
    这样做的话图像切换时还需要对文件进行jpeg格式的解码,我需要处理的都是8000*4000之类的大图,这样做很影响效率。我的思路是先读取图像文件,再将图像对象用字节流的方式序列化到硬盘上,这样图像切换时,直接去对硬盘上的文件进行deserialize动作,恢复图像对象,这样既可以节约一幅图的内存,也可以节省对一般格式图像文件进行解码的时间。不知道我的思路对不对?
      

  3.   

    继承Serializable接口之后,执行toSerialize()函数
      

  4.   

    同意楼上,实现了serializable接口的类都是可序列化保存,