有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这个序列化逻辑在“声明了不匹配的可序列化字段”时失败?

一个可重复的例子:

package test;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamField;
import java.io.Serializable;


public class mySerializable implements Serializable {

    private static int f;
    private static int g;

    private static final ObjectStreamField[] serialPersistentFields = {
            new ObjectStreamField("f", Integer.class),
            new ObjectStreamField("g", Integer.class),
    };

    public static void main(String[] args) {

        save();

    }
    public static void save() {
        try {
             FileOutputStream fileOut = new FileOutputStream("config" + ".ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut);
             out.writeObject(new mySerializable());
             out.close();
             fileOut.close();
        } catch (Exception ex) {
            System.out.println("save()" + ex.getLocalizedMessage());        }
    }
    public static int getF() {
        return f;
    }
    public static void setF(int f) {
        mySerializable.f = f;
    }
    public static int getG() {
        return g;
    }
    public static void setG(int g) {
        mySerializable.g = g;
    }
}

该程序打印: save():测试。我的家族化;声明了不匹配的可序列化字段


共 (1) 个答案

  1. # 1 楼答案

    你有两个问题:

    • fgstatic;静态字段不会序列化
    • 它们也是int型,而不是Integer

    使它们成为非静态的,并使用int.class引用它们

    Ideone demo