我无法找出一个实现问题,我有一个类,它的行为类似于列表但不是在某个集合中保存文件而是将它们保存在磁盘上。
当我想在列表中添加一些元素时,会出现问题。在我的文件的开头,我有一个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
“指针”写在文件的开头?
答案 0 :(得分:1)
通常使用基于流的类(尤其是像OOS这样的高阶流),您应该在更新时重写整个文件。
如果你真的INSIST只更新文件的一部分,那么你应该把文件想象成由N个流组成,其中每个'stream'代表你正在编写的一个对象。所以我会使用RandomAccessFile作为基本文件,然后当我想编写一个对象时,我会将一个ObjectOutputStream包装在ByteArrayOutputStream之上,将你的对象写入其中,然后取出那些字节,然后将这些字节重写到RandomAcessFile中你想要的。
这可能不会特别有效,因为您将编写N OOS标题,以及您正在编写的对象的N类描述。