[英]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.