Przez to zamiast użerać z jakimś rozsądnym sposobem serializowania obiektów w Bloggeroidzie po to by przekazywać je w Intentach popełniłem to w najbardziej prymitywny i prosty sposób.
Żeby przesłać obiekt z jednej aktywności do innej, lub do/z serwisu używamy intent.putExtras(String,byte[]), a do odebrania intent.getExtras.getByteArray(String).
Nasz obiekt musi implementować Serializable, i jego członkowie też.
Tutaj dwie użyteczne metody ;-)
public static byte[] toByteArray(Object obj) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
return baos.toByteArray();
}
public static<E> E toObject(byte[] arr) throws StreamCorruptedException, IOException, ClassNotFoundException {
ByteArrayInputStream bais = new ByteArrayInputStream(arr);
ObjectInputStream ois = new ObjectInputStream(bais);
return (E)ois.readObject();
}
Do toByteArray(Object) przekazujemy nasz obiekt do serializacj, pobierając zaś obiekt z toObject(byte[]) dostajemy to do czego przypisujemy wynik działania tej metody [tu uwaga, jak przypiszemy do czegoś innego to wyleci ClassCastException i tyle będzie zabawy :-)].
Btw. Pythonowe piklowanie brzmi lepiej niż serializacja, której nawet słowniki ortograficzne nie znają.
Jak na razie próbowałem z kilku-kilkunastobajtowymi obiektami i działa, sterta procesu rośnie, ale niewiele ponad to co Android daje w standardzie. Choć udało mi się dotrzeć już do 11MB, a to jednak dużo :-)
Ktoś zna bardziej "koszerny" sposób?
Podobne postybeta
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
Serializacja w Java'ie - revisited ;-)
Zinwigiluj się sam ;-)
Wredne Google Docs
Toperz ;-) czyli OCR + Android odsłona 2 albo któraś tam
Brak komentarzy:
Prześlij komentarz