当前位置: 首页 > 知识库问答 >
问题:

如何在Java中保存对象?构造函数中的反序列化

孙震博
2023-03-14

我想构造一个具有以下行为的对象:

我尝试了这个代码(对不起,我只有一部分,如果需要,我会尽快剩下的)

public class Garage implements Serializable
{
    private List<String> cars;

    public Garage()
    {
        File garageFile = new File("garage.txt");
        if(!garageFile.exists() || garageFile.length()==0)
        {
            cars = new List<String>;
            System.out.println("Aucune voiture sauvegardée");
        }
        else
        {
            ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(garageFile)));
            this = (Garage)ois.readObject();
         }
    }
}

我对this=(Garage)ois.readobject();有问题,我不知道如何管理它。我有一些想法,但所有的想法都是关于一个一个地做,如果可能的话,我宁愿避免这样做

共有1个答案

璩涵衍
2023-03-14

您的类变得复杂和错误,因为您没有划分应用程序中每个模块的职责,您试图做的必须是某个GarageManager类的工作,该类负责检查文件是否存在,并为您提供一个车库对象(无论是新创建的还是从磁盘还原的/反序列化的)

该经理的外观示例如下:

class GarageManager {

    public static Garage GetGarage(String garagePath)
            throws FileNotFoundException, IOException, ClassNotFoundException {
        Garage x = null;
        File garageFile = new File(garagePath);
        if (!garageFile.exists() || garageFile.length() == 0) {
            ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(garageFile)));
            x = (Garage) ois.readObject();
            ois.close();
        } else {
            x = new Garage();
        }
        return x;
    }
}
 类似资料:
  • 活体->动物->NPC->人->孩子 Live、Animal和NPC不实现Serializable。我不能改变这三门课。Person和Child确实实现了Serializable。人和生活也是抽象的类。我可以很好地序列化一个人(他是一个孩子)并发送它,但是当我尝试反序列化一个人(他是一个孩子)时,我在Child上得到一个InvalidClassException(无效构造函数),表示“no val

  • 我有一个四叉树,我想在几个不同的机器上使用它。调用构造函数(即构建树)需要很长时间。我不想每次我需要使用它的时候都建这棵树。 我正在寻找一种方法,将我的树持久保存在硬盘中,发送到每个节点,然后快速将其加载到内存中,以便执行查找。 序列化能帮助我吗?我知道我可以序列化树,把它保存到磁盘上,然后反序列化(这就是我对序列化的全部了解)。据我所知,反序列化步骤需要一个默认的构造函数来构建树。因为构建树的计

  • 问题内容: 说我以某种方式从另一个类获得了对象引用: 现在,我可以获取该对象的类: 现在,我可以获得该类的所有构造函数: 现在,我可以循环每个构造函数: 这已经为我很好地总结了构造函数,例如,构造函数public Test(String paramName)显示为public Test(java.lang.String) 但是,我不想获取类的类型,而是要获取参数的名称。在这种情况下,为“ para

  • 我正在编写一个库来访问用于管理后端系统中数据的网络应用编程接口。该库还将为类提供正确管理数据的逻辑。由于这个原因,大多数类不能有属性的公共设置器或接受所有属性的公共构造函数。相反,我试图使用一个具有内部访问修饰符的构造函数,它可以设置所有属性。 当试图使用System反序列化JSON字符串时。文本。json它将忽略内部构造函数-它将使用其他构造函数或抛出异常。我还尝试用注释内部构造函数,但它什么也

  • 问题内容: 我想在BaseClass构造函数中复制SubClass对象。我需要以下代码正确执行。 可能吗?如果可以,我该怎么办?其他如何获得类似的效果? 问题答案: 这是不可能的。类A的构造函数为您提供了A的实例,无法绕开它。为什么不显式实例化子类? 另一种可能性可能涉及静态工厂方法,例如:

  • 如何用jackson(Java)反序列化Object中的json对象(在我的例子中,字段中提供对象)? 输入字符串: {“header”:“OFFER”,“message”:“{”author\“:\”Peter Smith\“,\”previous\“:null,\”current\“:{”id\“:\”eOUQieQdvB\“,”authorUserId\“:\”foo\“}” {“autho