【问题标题】:Object ArrayList loses String values after deserialization?反序列化后对象 ArrayList 丢失字符串值?
【发布时间】:2016-04-08 22:42:42
【问题描述】:

所以我有一个三类视频商店 GUI,它应该保存库存中的视频记录。但是它使用序列化保存了视频对象,但由于某种原因,即使我没有收到任何错误,只有数值可以通过..

注意最左边的三列和最右边的列都是空的。这是因为它们本来应该有字符串,但它们没有......

正如我所说,我没有收到任何错误,所以这真的让我感到困惑。

VideoStore.java的构造函数(GUI类):

public VideoStore() {
        initComponents();
        model = (DefaultTableModel)displayVideos.getModel();
        try{
        BinaryFile = new BinaryFile();
        BinaryFile.load();
        }
        catch(Exception e){

        }
            for(int j = 1; j < BinaryFile.videosList.size(); j ++) {
            Video load = (Video)BinaryFile.videosList.get(j);
            String tempName = load.getVideoName();
            String tempProd = load.getProducer();
            String tempRat = load.getRating();
            String tempGenre = load.getGenre();
            short tempNum = load.getVidNum();
            float tempPrice = load.getvideoPrice(); 

            try {
                Object[] row = {ID, tempName, tempProd, tempGenre, tempPrice, tempNum, tempRat};
                model.addRow(row);
            } catch(Exception e){

            }

            ID++;
        }
    }

然后是我用来处理 .ser 文件的 BinaryFile 类:

public void load(){
        try
      {
         FileInputStream fileIn = new FileInputStream("/Users/hanaezz/Desktop/output.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         videosList = (ArrayList)in.readObject();
         in.close();
         fileIn.close();
      } catch(Exception i)
      {
         i.printStackTrace();
         return;
      }
    }

    public static void adderoo(Video v) {
        videosList.add(v);
    }

最后,ArrayList 中的视频类:

private static String videoName;
private static String producer;
private static String rating;
private static String genre;
private short videoNumber;
private float videoPrice;

【问题讨论】:

    标签: java serialization arraylist


    【解决方案1】:

    静态变量是序列化的,你应该把:

    private String videoName;
    private String producer;
    private String rating;
    private String genre;
    private short videoNumber;
    private float videoPrice;
    

    在您的视频课程中。 您应该放在 Serializable 类中的唯一静态变量是serialVersionUID(由序列化和反序列化过程使用)。如:

    private static final long serialVersionUID = 1L;
    

    【讨论】:

    • 正确答案,但他们最初是 static 的事实只是一个更大问题的迹象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2021-01-16
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多