繁体   English   中英

Java ObjectOutputStream和更新文件

[英]Java ObjectOutputStream and updating a file

我在弄清一个实现问题时遇到了麻烦,我有一个类,它的行为类似于list,但不是将文件保存在某个集合中,而是将它们保存在磁盘上。

当我想向列表中添加一些元素时,就会出现问题。 在文件的开头,我有一个int告诉我列表中有多少个对象,但是我无法找到一种优雅的方式来更新此值。 我有这样的事情:

   public boolean add(T element)
{
    try 
    {
        out.writeObject(element);
        out.flush();
        //and here we need to update the int in my file
    } catch (IOException e) 
    {
        e.printStackTrace();
    } 
    return true;
}

我试图使用这样的东西:

ObjectOutputStream upd=new ObjectOutputStream(new FileOutputStream(data.getAbsolutePath(),true));

但是正如我观察到的那样,它会将一些数据写入文件的开头,一些序列化标头或其他内容,我该如何更新文件中的单个条目或如何更改

ObjectOutputStream

“指针”写在文件的开头?

通常,对于基于流的类(尤其是高阶流,如OOS),应在每次更新文件时重写整个文件。

如果您真的只对文件的一部分进行更新,那么应该将文件视为由N个流组成,其中每个“流”代表您正在编写的一个对象。 因此,我将对基础文件使用RandomAccessFile,然后在我要写入对象时,将ObjectOutputStream包装在ByteArrayOutputStream之上,将对象写入其中,然后获取这些字节,然后将这些字节重写为RandomAcessFile,你要。

这可能不是特别有效,因为您将编写N个OOS标头和要编写的对象的N个类描述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM