序列化java对象

时间:2011-04-03 17:49:51

标签: java serialization

我正在尝试序列化java对象,但我不断收到错误列表。我的程序接受多个值并用它们创建一个类的实例。然后创建的对象存储在StorageSystem类中......它看起来像这样

    aCD = new CD(title, artist, playTime, numOfTracks);
    store.addItem(aCD);

然后在存储系统中我将存储的对象添加到arrayList ...我还想做的是将对象添加到序列化文件...我的方法是这样做...我要去的这是错误的方式。谢谢...

public void addItem(Item hold)                      // adds object to the ArrayList
{
    itemList.add(hold);

    totalStored++;

    FileOutputStream f_out;
    try
    {
        FileOutputStream fout = new FileOutputStream("thequeue.ser");
        ObjectOutputStream oos = new ObjectOutputStream(fout);
        oos.writeObject(hold);
        oos.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:2)

代码显示“正常”。这些是我的观察:

  1. 您的班级必须实施Serializable接口
  2. FileOutputStream f_out;从未读过
  3. 而不是附加单个对象为什么不把整个ArrayList,即(itemList)放到 对象输出流
  4. 在尝试'Exception'之前先抓住'IOException'

答案 1 :(得分:1)

代码似乎没问题,除了双重的,不清楚的decaration(首先f_out然后fout声明并使用了。)

您确定要序列化的类确实实现了Serializable标记接口吗?在任何情况下,我建议你将整个ArrayList写入对象输出流,而不是尝试追加单个对象。

答案 2 :(得分:1)

好吧,它不会做你想要的,因为每次打开FileOutputStream它都会覆盖最后一个文件 - 所以你总是只有一个项目文件。

此外,当您在FileOutputStream的范围之外声明它时,f_out的名称为try,但您会在该范围内创建另一个名为fout的{​​{1}}。 / p>

我不确定如果你关闭ObjectOutputStream代替FileOutputStream会发生什么 - 我认为它会关闭FileOutputStream但是我我不确定。