2014-06-30 14 views
7

Io uso Kryo per scrivere oggetti in matrici di byte. Funziona bene. Ma quando gli array di byte vengono convertiti in oggetti, genera l'eccezione com.esotericsoftware.kryo.KryoException: Buffer underflow..La deserializzazione di Kryo fallisce con "KryoException: Buffer underflow"

Questo è il mio deserializzazione:

 Kryo k=new Kryo(); 
     Input input=new Input(byteArrayOfObject);   
     Object o=k.readObject(input,ObjectClass.class); 

Inoltre, sempre il tipo di oggetto non può essere definito nella mia applicazione. Nel processo finale, avviene la conversione di classe. Pertanto,

  • Come posso risolvere sopra l'errore di deserializzazione

  • Esiste un modo per creare oggetti senza dare la classe in readObject (..., NomeClasse)?

+0

Sto affrontando lo stesso problema? È risolto? Ho provato sotto i suggerimenti, non ha aiutato .. – Sharath

risposta

9

Questo è successo a me quando non stavo chiudendo correttamente i tipi di uscita/ingresso. Devi assicurarti che Kryo svuota tutto, ma facendo output.flush() o output.close().

In secondo luogo, esaminare kryo.writeClassAndObject(). Puoi quindi fare kryo.readClassAndObject() e trasmettere il tuo oggetto al tipo che dovrebbe essere.

1

Questo è successo a me quando ho usato il serializzatore in più thread. Non è thread-safe, quindi se lo si utilizza in questo modo, potrebbe darti "buffer underflow" o altre eccezioni.

+0

Questa idea è ripresa dalla risposta qui: https://github.com/EsotericSoftware/kryo/issues/128#issuecomment-28249144 –

1

Ho visto questo errore a causa di un vero problema di serializzazione Java; la mia definizione di classe non era la stessa sul lato produttore e consumatore (due diverse applicazioni) e di conseguenza ho ottenuto questa eccezione.

Volevo solo lasciare questo come una FYI se non avessi ancora controllato.

Problemi correlati