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

将对象追加到序列化文件

林和畅
2023-03-14

假设您有一些AppendObjectOutputStream类(这是一个ObjectOutputStream!)将重写writeStreamHeader(),如下所示:

@Override
public void writeStreamHeader() throws IOException
{
    reset();
}

现在,假设您计划将多个对象保存到一个文件中;每次程序运行一个对象。即使在第一次运行时,您也会使用AppendObjectOutputStream()吗?

共有2个答案

杜阳炎
2023-03-14

以上对我不起作用,特别是重置()不起作用。我在这里发现了以下内容:https://coderanch.com/t/583191/java/ObjectOutputStream-appending-file-overiding-ObjectOutputStream

@Override 
protected void writeStreamHeader() throws IOException {  
   // TODO Auto-generated method stub  
   System.out.println("I am called");  
   super.writeStreamHeader();
}  

这对我有用。我知道这似乎违反直觉,乍一看,调用超类方法似乎不应该做任何事情,但它确实做了。阅读原文并尝试一下。

解翰采
2023-03-14

您必须首先使用常规ObjectOutputStream编写流头,否则您将得到java。木卫一。使用ObjectInputStream打开文件时发生StreamCorruptedException。

public class Test1 implements Serializable {

    public static void main(String[] args) throws Exception {
        ObjectOutputStream os1 = new ObjectOutputStream(new FileOutputStream("test"));
        os1.writeObject(new Test1());
        os1.close();

        ObjectOutputStream os2 = new ObjectOutputStream(new FileOutputStream("test", true)) {
            protected void writeStreamHeader() throws IOException {
                reset();
            }
        };

        os2.writeObject(new Test1());
        os2.close();

        ObjectInputStream is = new ObjectInputStream(new FileInputStream("test"));
        System.out.println(is.readObject());
        System.out.println(is.readObject());
 类似资料:
  • 问题内容: 假设您有一些AppendObjectOutputStream类(这是一个ObjectOutputStream!),它重写了writeStreamHeader(),如下所示: 现在,假设您打算将多个对象保存到一个文件中。程序每次运行时,一个对象。即使在第一次运行时,您是否也会使用AppendObjectOutputStream()? 问题答案: 您必须首先使用常规ObjectOutput

  • 在我的用例中,我需要一个find a way将键/值对追加到现有序列文件中。怎么做?任何线索都会大有帮助。我正在使用Hadoop2X。

  • 问题内容: 我想计算一些列数据并将其作为列写入文件。然后,在计算了另一列数据之后,我想将其附加到同一文件中,但作为新列。 这是我所做的: 结果-它将新列追加到第一列下方,因此我只有一个长列。 谢谢, 问题答案: 您将必须逐行读取文件,然后将新列插入每一行。这是使用BufferedReader和BufferedWriter的解决方案

  • 问题内容: 我有一个Java库,我想将一个Java对象的实例保存到文本文件中。我尝试使用所有Java库对XML进行序列化和反序列化:但是反序列化不起作用。我在这里发布了一个问题:但是看来我无法为此找到解决方案。 我也尝试过序列化到json ,但是从json反序列化不起作用。 因此,我想知道,还有其他方法可以从Java对象(无法修改以添加标签:)到文本文件进行序列化和反序列化吗? 提前致谢! 问题答

  • 在我的项目中,我遇到了一种情况,即封送一个pojo对象,第一次将输出写入XMLfile中,然后在同一个文件中添加具有不同值但相同节点和子节点的相同封送对象。下面是代码- 当Person构造函数中的'id'发生更改,并且下次用不同的属性值封送Person对象时,'file.xml'文件将被覆盖,我丢失了以前的输出。简单地说,我希望每次“id”get发生更改时都追加封送的Person对象。即用不同的值

  • 问题内容: 我想将一个对象写入CSV文件。对于XML,我们有XStream的像这样 所以,如果我想转换对象CSV我们是否有任何这样的图书馆吗? 编辑: 我想将我的Bean列表传递给应该将Bean的所有字段都写入CSV的方法。 问题答案: 首先,序列化是将对象“按原样”写入文件。AFAIK,您不能选择文件格式和全部。序列化的对象(在文件中)具有自己的“文件格式” 如果要将对象(或对象列表)的内容写入