JAVA СЕРИАЛИЗАЦИЯ И ДЕСЕРИАЛИЗАЦИЯ: из двух отдельных объектов, которые имеют свои списки массивов в одном файле - PullRequest
1 голос
/ 11 марта 2020

В настоящее время у меня возникли некоторые проблемы с сериализацией и десериализацией (я подозреваю, что проблема заключается в сериализации) Два ArrayLists для двух отдельных объектов. ArrayList1 (для object1) и ArrayList2 (для object2) Необходимо хранить оба файла в одном и том же файле, но, к сожалению, он не работает.

import java.io.Serializable;

public class Object1 implements Serializable {

    public int num;
    String name;
    String id;

    public BeanBagObject(int num,String, String name,String id){
        this.num = num;
        this.name = name;
        this.id = id;
    }
  //get method
    public int getNum(){return this.num;}
    public String getName(){return this.name;}
    public String getId(){return this.id;}
}

В файл также включено:

public static ObjectArrayList Object1List = new ObjectArrayList();
public static ObjectArrayList Object2List = new ObjectArrayList();
import java.io.Serializable;

public class Object2 implements Serializable {

    public int num;
    int TwoNumber;
    String id;

    public ReservationObject(int num,int TwoNumber,String id){
        this.num = num;
        this.TwoNumber = TwoNumber;
        this.id = id;
    }
    //get method
    public int getNum(){return this.num;}
    public int getTwoNumber(){return this.TwoNumber;}
    public String getID(){return this.id;}

}
public void saveStoreContents(String filename) throws IOException {
            try{
                FileOutputStream fos= new FileOutputStream(filename);
                ObjectOutputStream oos= new ObjectOutputStream(fos);
                oos.writeObject(Object1List);
                oos.writeObject(Object2List);
                oos.close();
                fos.close();
            }catch(IOException ioe){
                ioe.printStackTrace();//Prints this throwable and its backtrace to the standard error stream.
            }
        }
public void loadStoreContents(String filename) throws IOException,
            ClassNotFoundException {
            ArrayList<String> arraylist= new ArrayList<String>();
            try
            {
                FileInputStream fis = new FileInputStream(filename);
                ObjectInputStream ois = new ObjectInputStream(fis);
                arraylist = (ArrayList) ois.readObject();
                ois.close();
                fis.close();
            }catch(IOException ioe){
                ioe.printStackTrace();
                return;
            }catch(ClassNotFoundException c){
                System.out.println("Class not found");
                c.printStackTrace();//Prints this throwable and its backtrace to the standard error stream.
                return;
            }
            for(String str: arraylist){
                System.out.println(str);
            }
    }

Кажется, что это нормально, но печатает объектный список с идентификатором, а не с фактическим содержимым, без понятия, почему: (((( Любая помощь будет очень высоко ценится, спасибо чел.)

1 Ответ

0 голосов
/ 11 марта 2020

Если вы хотите напечатать содержимое объекта вместо идентификатора объекта, вам нужно реализовать метод public String toString();. Используя ваш код, он может выглядеть так:

import java.io.*;
import java.util.ArrayList;
import java.util.List;

class Scratch {
    public static List<ReservationObject> objectList1 = new ArrayList<>();
    public static List<BeanBagObject> objectList2 = new ArrayList<>();

    public static void main(String[] args) {
        Scratch scratch = new Scratch();
        objectList1.add(new ReservationObject(1, 2, "id"));
        objectList2.add(new Scratch.BeanBagObject(1, "name", "id"));
        try {
            scratch.saveStoreContents("test");
            scratch.loadStoreContents("test");
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public void loadStoreContents(String filename) throws IOException,
            ClassNotFoundException {
        ArrayList<ReservationObject> arraylist1;
        ArrayList<BeanBagObject> arraylist2;
        try {
            FileInputStream fis = new FileInputStream(filename);
            ObjectInputStream ois = new ObjectInputStream(fis);
            arraylist1 = (ArrayList<ReservationObject>) ois.readObject();
            arraylist2 = (ArrayList<BeanBagObject>) ois.readObject();
            ois.close();
            fis.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
            return;
        } catch (ClassNotFoundException c) {
            System.out.println("Class not found");
            c.printStackTrace();//Prints this throwable and its backtrace to the standard error stream.
            return;
        }
        for (ReservationObject reservationObject : arraylist1) {
            System.out.println(reservationObject);
        }
        for (BeanBagObject beanBagObject : arraylist2) {
            System.out.println(beanBagObject);
        }
    }

    public void saveStoreContents(String filename) throws IOException {
        try {
            FileOutputStream fos = new FileOutputStream(filename);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(objectList1);
            oos.writeObject(objectList2);
            oos.close();
            fos.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();//Prints this throwable and its backtrace to the standard error stream.
        }
    }

    public static class ReservationObject implements Serializable {

        public int num;
        int TwoNumber;
        String id;

        public ReservationObject(int num, int TwoNumber, String id) {
            this.num = num;
            this.TwoNumber = TwoNumber;
            this.id = id;
        }

        //get method
        public int getNum() {
            return this.num;
        }

        public int getTwoNumber() {
            return this.TwoNumber;
        }

        public String getID() {
            return this.id;
        }

        @Override
        public String toString() {
            return "ReservationObject{" +
                    "num=" + num +
                    ", TwoNumber=" + TwoNumber +
                    ", id='" + id + '\'' +
                    '}';
        }
    }

    public static class BeanBagObject implements Serializable {

        public int num;
        String name;
        String id;

        public BeanBagObject(int num, String name, String id) {
            this.num = num;
            this.name = name;
            this.id = id;
        }

        //get method
        public int getNum() {
            return this.num;
        }

        public String getName() {
            return this.name;
        }

        public String getId() {
            return this.id;
        }

        @Override
        public String toString() {
            return "BeanBagObject{" +
                    "num=" + num +
                    ", name='" + name + '\'' +
                    ", id='" + id + '\'' +
                    '}';
        }
    }
}

Что печатает:

ReservationObject{num=1, TwoNumber=2, id='id'}
BeanBagObject{num=1, name='name', id='id'}
...