gpt4 book ai didi

Java ObjectOutputStream 和更新文件

转载 作者:行者123 更新时间:2023-12-02 08:04:39 25 4
gpt4 key购买 nike

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

当我想向列表中添加一些元素时,就会出现问题。在文件的开头,我有一个 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));

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

ObjectOutputStream

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

最佳答案

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

如果您确实坚持只更新文件的一部分,那么您应该将该文件视为由 N 个流组成,其中每个“流”代表您正在写入的一个对象。所以我会使用 RandomAccessFile 作为基本文件,然后当我想写入一个对象时,我会将 ObjectOutputStream 包装在 ByteArrayOutputStream 之上,将对象写入其中,然后获取这些字节,并将这些字节重写到 RandomAcessFile 中,其中你想要的。

这可能不会特别有效,因为您将为正在编写的对象编写 N 个 OOS header 和 N 个类描述。

关于Java ObjectOutputStream 和更新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com