2013-01-03 7 views
7

Eventuali duplicati:
Converting any object to a byte array in javaIn Java, come convertire un elenco di oggetti nell'array di byte?

ho una classe che ha bisogno di essere memorizzati nella cache. L'API cache fornisce un'interfaccia che memorizza nella cache byte[]. La mia classe contiene un campo come List<Author>, dove Author è un'altra classe. Qual è il modo corretto per me di trasformare List<Author> in byte[] per la memorizzazione nella cache? E recuperare il byte[] dalla cache per ricostruire il List<Author>?

Ulteriori dettagli sulla classe Author: è molto semplice, ha solo due campi String. Un campo String può essere null.

+3

http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html –

risposta

14

classe Author dovrebbe attuare Serializable

quindi è possibile utilizzare ObjectOutputStream per serializzare l'oggetto e ByteArrayOutputStream per farlo scritto come byte.

Quindi deserializzare utilizzando ObjectInputStream e riconvertire.

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(bos); 
    oos.writeObject(list); 
    byte[] bytes = bos.toByteArray(); 
+0

Questo è chiuso, quindi non è sicuro se le persone possano leggerlo o meno. Ma proviamo la potenza di stackoverflow: quando implemento un'interfaccia Serializable, dovrei fornire un serialVersionID, che dovrebbe essere un UID. La domanda è, se dovrei fornirla o va bene per lasciarla fuori. Se dovrei fornirlo, come? Qualsiasi UID va bene? – Steve

2

Fai il Author classe serializzabile e scrivere l'elenco in un ObjectOutputStream sostenuta da un ByteArrayOutputStream.

1

Rendi la tua classe serializzabile; creare un ObjectStream su un ByteStream e scrivere l'elenco su ObjectStream. Passa il buffer di byte da ByteStream alla tua API di caching.

Quando si recupera dalla cache, si inverte il processo. Creare un ByteStream dal byte [] restituito dall'API di caching; creare un ObjectStream da ByteStream; leggi la tua collezione da ObjectStream.

Problemi correlati