PDA

View Full Version : [java]problema objectOutputStream


tonio123
04-11-2012, 22:39
Salve a tutti, sto cercando di scrivere una serie di funzioni per rendere più rapido l'utilizzo delle datagramsocket in java, ma ho dei problemi con l'objectOutputStream, per spiegarmi meglio ho scritto questo programmino:

public static void main(String[] args) throws IOException, ClassNotFoundException{
Address pippo=new Address("230.0.0.1",54321);
ByteArrayOutputStream buf=new ByteArrayOutputStream();
ObjectOutputStream out=new ObjectOutputStream(buf);
for(int i=0; i<30; i++){
out.writeObject(pippo);
out.flush();
ObjectInputStream in=new ObjectInputStream(new ByteArrayInputStream(buf.toByteArray()));
System.out.println(in.readObject());
in.close();
buf.reset();

}
Se fatto girare spara un StreamCorruptedException dopo la prima iterazione, per il momento googlando sono arrivato a capire che il problema è che quando l'objectInputStream va a leggere dall'array non trova un header e per questo manda l'eccezione, ma non capisco perchè questo accada, probabilmente c'entra qualcosa la reset di buf che cancella cose che non dovrebbe.

se alla fine faccio
buf.reset();
out.close();
out=new ObjectOuputStream(buf);
//out.reset();
funziona, ma in mainera troppo lenta, passeranno un 3-4 secondi tra una scrittura e la successiva. Mentre con la out.reset() che in teoria secondo la documentazione dovrebbe fare la stessa cosa, la velocità c'è ma non risolvo il problema.

Qualche idea su cosa stia sbagliando?

EDIT: dopo ulteriori ricerche pare che la reset() cancelli una cache di oggetti in objectoutputstream che usa a fini di ottimizzazione, ma non resetta il canale.
C'è un modo per forzare objectOutputStream a reinizializzare il canale scrivendo gli opportuni header? Eccetto creare un nuovo oggetto che mi rallenta mostruosamente tutto?
Oppure perchè la creazione di un nuovo objectOutputStream mi rallenta così tanto?