0

안녕하세요, 기존 파일에 새 개체를 추가하려고 할 때 문제가 있습니다. 안드로이드 앱이 다시 점심을 먹으면 기존 파일을 가져 와서 새로운 개체를 추가하고 싶습니다. 기존 파일의 객체 ... 사실, 객체를 읽으려고 할 때 코드는 첫 번째 객체 만 읽습니다 .. 코드 아래에서 찾을 수 있습니다. 도와 주실 수 있습니까? 감사합니다기존 파일에 새로운 개체 추가하기

개체를 작성하기 위해 다음과 같은 방법을 사용하여 : 불행하게도 새 ObjectOutputStream 당신이 원하는 모든 시간을 만들 수 없습니다

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; 
} 
+0

* 개체를 반환 할 때 * : ** 개체 **가 선언 된 위치는 어디입니까? ** 객체 **에 어떤 가치를두고 있습니까? – ilomambo

+0

다른 오브젝트를 다른 파일에 쓰고 있다면 실제로 파일에 작성한 모든 오브젝트를 실제로 가져올 수 있습니까? – Darwind

답변

0

: 객체를 읽어 다음과 같은 방법을 사용하여

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(); 
    } 
} 

을 스트림에 추가 한 다음 모든 스트림을 단일 스트림으로 다시 읽습니다. constructor은 개체 작성을 시작하기 전에 기본 스트림에 헤더를 추가합니다. 첫 번째 헤더가 0xAC이기 때문에 java.io.StreamCorruptedException: invalid type code: AC 예외가 표시됩니다.

처리 할 오브젝트의 수를 알 수는 없지만 하나의 옵션은 오브젝트를 모두 읽은 다음 단일 ObjectOutputStream을 사용하여 오브젝트를 모두 다시 작성하는 것입니다. 많은 물체가있는 경우 비용이 많이들 수 있습니다. 또는 Externalizable을 통해 직접 직렬화를 직접 관리하는 것이 좋습니다. 그것은 고통 스러울 수 있습니다.

관련 문제