相关疑难解决方法(0)

附加到ObjectOutputStream

是不是可以附加到ObjectOutputStream

我试图附加到对象列表.以下代码段是一个在作业完成时调用的函数.

FileOutputStream fos = new FileOutputStream
           (preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );
out.close();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试阅读它时,我只得到文件中的第一个.然后我明白了java.io.StreamCorruptedException.

阅读我正在使用

FileInputStream fis = new FileInputStream
        ( preferences.getAppDataLocation() + "history");
ObjectInputStream in = new ObjectInputStream(fis);    

try{
    while(true)
        history.add((Stuff) in.readObject());
}catch( Exception e ) { 
    System.out.println( e.toString() );
}
Run Code Online (Sandbox Code Playgroud)

我不知道会有多少个物品存在,所以我在读书时没有例外.从谷歌所说的这是不可能的.我想知道是否有人知道方法?

java serialization append objectoutputstream objectinputstream

55
推荐指数
4
解决办法
6万
查看次数

将对象附加到二进制文件

你有以下方法:

public static void writeToBinary(Object obj, String filename) 
{
 ObjectOutputStream oos = null;
 try {
  oos = new ObjectOutputStream(new FileOutputStream(filename));
  oos.writeObject(obj);
 } catch (Exception e) {
  e.printStackTrace();
 }  finally{
  try{
   if (oos != null) oos.close ();
  }catch (Exception e){
   e.printStackTrace();
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,该方法将对象写入二进制文件.

但是现在您想要重写相同的方法以允许将对象附加到同一文件.
好的,你看一下java文档,你会发现你必须在FileOutputStream中添加一个值为true的参数:

oos = new ObjectOutputStream(new FileOutputStream(filename, true));
Run Code Online (Sandbox Code Playgroud)

你编译但是,哎呀!似乎它继续覆盖文件.

好吧,问题就开始了.在google中搜索后,您会发现必须使用SAME ObjectOutputStream将对象附加到同一文件中.你希望有一个函数,每次调用它时,它都会追加一个对象.即:

writeToBinary("a", filename);
writeToBinary("b", filename);
Run Code Online (Sandbox Code Playgroud)

但正如我之前所说,你必须使用相同的ObjectOutputStream.

解决方案1:

ObjectOutputStream out = getOutputStream (filename);
writeToBinary("a", out);
writeToBinary("b", out);
writeToBinary("c", out);
out.close ();
Run Code Online (Sandbox Code Playgroud)

这非常难看,因为我想隐藏流的使用.

还有其他解决方案吗?

编辑:该方法是静态的.它位于实用程序类中,其中所有方法都是静态的.

编辑2:解决了!附加到ObjectOutputStream …

java

1
推荐指数
1
解决办法
1万
查看次数