Ajout à des flux d'objets existants
La question se pose de savoir s'il est possible d'ajouter à un ObjectOutputStream. Une tentative d'ajout d'une liste d'objets échoue par intermittence pendant la lecture, ce qui entraîne une exception java.io.StreamCorruptedException.
L'utilisation typique implique :
FileOutputStream fos = new FileOutputStream (preferences.getAppDataLocation() + "history" , true); ObjectOutputStream out = new ObjectOutputStream(fos); out.writeObject( new Stuff(stuff) ); out.close();
Par la suite, pendant la lecture :
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() ); }
Sous-classer ObjectOutputStream et remplacer la méthode writeStreamHeader fournit le solution :
public class AppendingObjectOutputStream extends ObjectOutputStream { public AppendingObjectOutputStream(OutputStream out) throws IOException { super(out); } @Override protected void writeStreamHeader() throws IOException { // do not write a header, but reset: // this line added after another question // showed a problem with the original reset(); } }
Instancier un flux pouvant être ajouté si le fichier historique existe (ajouter sans en-tête) ou un flux original s'il n'existe pas (créer avec un en-tête).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!