PDA

Visualizza la versione completa : [JAVA] StreamCurruptedException


koala81
15-12-2005, 17:43
Salve ragazzi,
un eccezione di questo tipo da cosa può dipendere???

StreamCurruptedException

Il mio programma ha un ciclo infinito di attesa in cui legge su un ObjectOutputStream con la readObject().
La prima volta mi compare questa eccezione, inizia lo scambio di messaggi ed ad un certo punto il server non riceve più nulla.

Cosa posso fare???

Grazie

LeleFT
16-12-2005, 10:08
StreamCorruptedException viene sollevata quanto tenti di leggere da un ObjectInputStream (o, in generale, da uno Stream) dei dati che lui non si aspetta di trovare (perchè magari sono di tipo diverso da ciò che si aspetta).

Ad esempio, se metti in ascolto da tastiera un ObjectInputStream riceverai quel tipo di eccezione per il seguente motivo: la readObject() si aspetta di ricevere un Oggetto Java, ma trova una serie di caratteri iniziali che non rappresentano l'intestazione di una classe.

Gli oggetti, infatti, sono rappresentati in memoria tramite un "preambolo" di byte che indicano alla JVM che si tratta di un Object, quindi c'è la parte di dati, poi (probabilmente) c'è una serie di byte che identifica la fine dell'oggetto. Quindi, ad esempio, una Stringa potrebbe essere rappresentata così:


[PREAMBOLO]Questa è la stringa[FINE_DATI]

Dove PREAMBOLO potrebbe essere una cosa del genere (ovviamente codificata):


Tipo: Object
Sottotipo: String
Versione JVM: 1.4.2
ObjectClassID: 0000255648956100156

e FINE_DATI potrebbe essere un byte che rappresenta la fine dei dati (come un EOF).

Se tu metti in ascolto un ObjectInputStream sulla tastiera e cominci a scriverci "Questa è la stringa", il primo carattere che arriva alla readObject() è la Q, il successivo è la u e probabilmente già al primo carattere ti segnala l'eccezione perchè il PREAMBOLO deve cominciare con un particolare carattere...


Ciao. :ciauz:

Loading