0

こんにちは、既存のファイルに新しいオブジェクトを追加しようとすると問題が発生します.Androidアプリが再び起動したら、既存のファイルを取得して新しいオブジェクトを追加し、既存のファイルからオブジェクトを読み取ります...実際には、オブジェクトを読み取ろうとすると、コードは最初のオブジェクトのみを読み取ります..コードの下にあります..助けていただけますか? ありがとう

次のメソッドを使用してオブジェクトを書き込みます。

 public void saveObject(Person p, File f){
     try
     {

         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f, true));
         oos.writeObject(p);
         oos.reset();
         oos.flush(); 
         oos.close();


     }
     catch(Exception ex)
     {
        Log.v("Serialization Save Error : ",ex.getMessage());
        ex.printStackTrace();
     }
}

次のメソッドを使用してオブジェクトを読み取ります。

    public Object loadSerializedObject(File f)
{

       try {
          ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
           try{
              Object loadedObj = null;
              while ((loadedObj = ois.readObject()) != null) {
              Log.w(this.getClass().getName(), "ReadingObjects") ;

            }
              return objects;
           }finally{
               ois.close();
           }

       } catch (StreamCorruptedException e) {
           e.printStackTrace();
       } catch (IOException e) {

           e.printStackTrace();
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
       return null;
}
4

1 に答える 1

0

ObjectOutputStream残念ながら、ストリームに追加してすべてを1つのストリームで読み戻すたびに新しいものを作成することはできません。コンストラクターは、オブジェクトの作成を開始する前に、基になるストリームにヘッダーを追加します。おそらくjava.io.StreamCorruptedException: invalid type code: AC例外が表示されています。これは、最初のヘッダーが。であるためです0xAC

処理しているオブジェクトの数はわかりませんが、1つのオプションとして、すべてのオブジェクトを読み取り、1つのオブジェクトを使用してすべてを書き換えることができますObjectOutputStream。オブジェクトがたくさんある場合、それは高価になる可能性があります。または、 Externalizableを使用して手動でシリアル化を管理することを検討することもできます。しかし、それは痛みを伴う可能性があります。

于 2013-02-13T13:18:54.283 に答える