2010-05-21 6 views
0

Nous avons une application qui nous oblige à lire dynamiquement les données d'un fichier (.dat) en utilisant la désérialisation. Nous obtenons réellement le premier objet et il jette une exception de pointeur nul et "java.io.StreamCorruptedException: code de type invalide: AC" lorsque nous accédons à d'autres objets en utilisant une boucle "for".Comment lire les données du fichier (.dat) en mode ajout

 File file=null; 
     FileOutputStream fos=null; 
     BufferedOutputStream bos=null; 
     ObjectOutputStream oos=null; 
     try{ 
      file=new File("account4.dat"); 
      fos=new FileOutputStream(file,true); 
      bos=new BufferedOutputStream(fos); 
      oos=new ObjectOutputStream(bos); 
      oos.writeObject(m); 
      System.out.println("object serialized"); 
      amlist=new MemberAccountList(); 
      oos.close(); 
     } 
     catch(Exception ex){ 
     ex.printStackTrace(); 
     } 

objets de lecture:

try{ 
    MemberAccount m1; 
    file=new File("account4.dat");//add your code here 
    fis=new FileInputStream(file); 
    bis=new BufferedInputStream(fis); 
    ois=new ObjectInputStream(bis); 
    System.out.println(ois.readObject()); 
    **while(ois.readObject()!=null){ 
    m1=(MemberAccount)ois.readObject(); 
     System.out.println(m1.toString()); 
    }/*mList.addElement(m1);** // Here we have the issue throwing null pointer exception 
    Enumeration elist=mList.elements(); 
    while(elist.hasMoreElements()){ 
     obj=elist.nextElement(); 
     System.out.println(obj.toString()); 
    }*/ 

} 
catch(ClassNotFoundException e){ 

} 
catch(EOFException e){ 
    System.out.println("end"); 
} 
catch(Exception ex){ 
    ex.printStackTrace(); 
} 
+0

est-ce une copie exacte de http://stackoverflow.com/questions/2879726/retrieve-data-from-dat-file – JoseK

Répondre

0

Après avoir lu un objet à partir du flux d'entrée, les points de flux à l'objet suivant.

Essayez (sans lire ois avant):

MemberAccount m1 = null; 
while((m1=ois.readObject()) != null){ 
    System.out.println(m1.toString()); 
} 
0

Le grammar pour les objets sérialisés est défini comme:

stream: 
    magic version contents 

En utilisant l'option append (new FileOutputStream(file,true);) vous créez un fichier avec ce données:

stream: 
    magic version contents magic version contents magic version contents .... 

Ces données ne sont pas conformes à la spécification et ne peut pas être décodé par ObjectInputStream.

Questions connexes