Is it possible to serialize an ArrayList of objects containing a BufferedImage as one of the variables of a private instance of an object in java?

I am trying to develop team management software. I have a Team object:

public class Team implements Serializable{
    private String name;//
    private ArrayList<Player> teamMembers;//
    private String sport;//
    private ArrayList<Staff> staff;//Non-Player Members such as head coach, assisstant coach, physio, etc.
    private Object schedule;
    private String teamHometown;
    private String teamState;   

  // Getter and setter methods go here

    public Team(String name, String sport, ArrayList<Player> players, ArrayList<Staff> staff){
        teamMembers = players;
        this.staff = staff;
        this.sport =(sport);
        this.name = (name);

    }

}

The command object contains an ArrayList of Player objects. In each Player object, a player has many attributes, such as a name, statistics, and a photo of the player (buffered image):

public class Player implements Serializable{

    private BufferedImage playerPhoto;
    private String firstName;
    private String lastName;
    private int jerseyNumber;
    private String playerPosition;
    private String status;//Is the player Eligible to plays
    private int gameAbscenses;
    private int goals;
    private int appearances;
    private int yellowCards;
    private int redCards;
    private LocalDate birthday;
    private boolean starter;
    private int shots;
    private int shotsOnGoal;
    private int assists;

   //Getter and Setter Methods go here

    public Player(String firstName, String lastName, int jerseyNumber, String playerPosition,BufferedImage playerPhoto) {
        this.firstName = (firstName);
        this.lastName = (lastName);
        this.jerseyNumber = (jerseyNumber);
        this.playerPosition = (playerPosition);
        this.gameAbscenses = (0);
        this.status = ("Healthy");
        this.starter = false;

        //stats
        this.shots = (0);
        this.appearances = (0);
        this.shotsOnGoal = (0);
        this.redCards = (0);
        this.yellowCards = (0);
        this.assists =  (0);
        this.goals = (0);

        this.birthday = LocalDate.now();

    }

My goal is to serialize an array of Team objects, but the buffered images are not serializable, and since the Player object contains a buffer image as one of its private instance variables, I cannot serialize ArrayList of Team objects.

I initially tried to do this:

 ArrayList<Team> finalTeams = new ArrayList<>(SignInController.userTeams);//Converting the user teams Observable list to an Array List

            //Saving the user Teams locally

            FileOutputStream fos = new FileOutputStream(SignInController.userfname+" Teams/"+SignInController.userfname+"_teams.xtm");
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            oos.writeObject(finalTeams);//serializing the ARRAYlist of teams
            oos.close();
            fos.close();

. , , .

- , , ! !

+4
2

, , ?! ,

  • , Serializable
  • , ,
  • , .

,

import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
public class Member implements Serializable
{

    private String name;
    private byte[] imagebytes;

    public Member(String name, BufferedImage image) throws IOException
    {
        this.name = name;
        this.setImage(image);
    }

    public Member(String name, File imageFile) throws IOException
    {
        this.name = name;
        this.setImage(imageFile);
    }

    public final void setImage(BufferedImage image) throws IOException
    {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", outputStream);
        this.imagebytes = outputStream.toByteArray();
    }

    public final void setImage(File imageFile) throws IOException
    {
        BufferedImage bufferedImage = ImageIO.read(imageFile);
        this.setImage(bufferedImage);
    }


    public BufferedImage getImage()
    {

        try
        {
            return ImageIO.read(new ByteArrayInputStream(imagebytes));
        } catch (Exception io)
        {
            return null;
        }
    }

    public String getName()
    {
        return name;
    }

} 

,

+1

javadocs

, :

 private void writeObject(java.io.ObjectOutputStream out)
     throws IOException
 private void readObject(java.io.ObjectInputStream in)
     throws IOException, ClassNotFoundException;
 private void readObjectNoData()
     throws ObjectStreamException;

, , BufferedImage .

0

Source: https://habr.com/ru/post/1661769/


All Articles