Serializando um objeto que inclui BufferedImages
Como o título sugere, estou tentando salvar para arquivar um objeto que contém (entre outras variáveis, Strings, etc.) algumas BufferedImages.
Eu achei isto:Como serializar um objeto que inclui BufferedImages
E funciona como um encanto, mas com um pequeno contratempo: funciona bem se o seu objeto contiver apenas UMA imagem.
Estou lutando para que a solução dele funcione com mais de uma imagem (o que, em teoria, deveria funcionar), mas cada vez que leio o arquivo, recupero meu objeto, recebo o número correto de imagens, mas apenas a primeira a imagem é realmente lida; os outros são apenas imagens nulas que não contêm dados.
É assim que meu objeto se parece:
class Obj implements Serializable
{
transient List<BufferedImage> imageSelection= new ArrayList<BufferedImage>();
// ... other vars and functions
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeInt(imageSelection.size()); // how many images are serialized?
for (BufferedImage eachImage : imageSelection) {
ImageIO.write(eachImage, "jpg", out); // png is lossless
}
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
final int imageCount = in.readInt();
imageSelection = new ArrayList<BufferedImage>(imageCount);
for (int i=0; i<imageCount; i++) {
imageSelection.add(ImageIO.read(in));
}
}
}
É assim que estou escrevendo e lendo o objeto de e para um arquivo:
// writing
try (
FileOutputStream file = new FileOutputStream(objName+".ser");
ObjectOutputStream output = new ObjectOutputStream(file);
){
output.writeObject(myObjs);
}
catch(IOException ex){
ex.printStackTrace();
}
// reading
try(
FileInputStream inputStr = new FileInputStream(file.getAbsolutePath());
ObjectInputStream input = new ObjectInputStream (inputStr);
)
{myObjs = (List<Obj>)input.readObject();}
catch(Exception ex)
{ex.printStackTrace();}
Embora eu tenha uma lista de objetos, eles são lidos corretamente e cada elemento da lista é preenchido de acordo, exceto para o BufferedImages.
Alguém tem algum meio de consertar isso?