Ho bisogno di serializzare oggetti in String e deserializzare.Come eseguire il binario (de) serializzare l'oggetto in/form string?
ho readed sugestion su StackOverflow e rendere questo codice:
class Data implements Serializable {
int x = 5;
int y = 3;
}
public class Test {
public static void main(String[] args) {
Data data = new Data();
String out;
try {
// zapis
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(data);
out = new String(baos.toByteArray());
System.out.println(out);
// odczyt.==========================================
ByteArrayInputStream bais = new ByteArrayInputStream(out.getBytes());
ObjectInputStream ois = new ObjectInputStream(bais);
Data d = (Data) ois.readObject();
System.out.println("d.x = " + d.x);
System.out.println("d.y = " + d.y);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
ma ottengo l'errore:
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
at p.Test.main(Test.java:37)
Perché? Mi aspettavo: d.x = 5 d.y = 3
come fare in modo corretto? Ah. Non voglio scrivere questo oggetto nel file. Devo averlo in formato stringa.
Perché proprio vuoi archiviare una rappresentazione binaria in una stringa, in primo luogo? Perché non tenerlo semplicemente come un array di byte o qualcosa del genere? ... –
@CostiCiudatu perché devo scrivere un metodo che memorizza gli oggetti nel database sqlite ma una parte in sqlite non dipende da me. E c'è una colonna di testo. Ora ho serializzazione xml ma è lento. Ho bisogno di un modo veloce. – LunaVulpo
Hai verificato se SQLite supporta qualcosa come BLOB per la memorizzazione di byte non elaborati? –