wtorek, sierpnia 03, 2010

Lenistwo w działaniu, "piklujemy" Androida ;-)

Znów mnie dopadło lenistwo i nie chce mi się kodować :-)
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 ;-)
Zinwigiluj się sam ;-)
Wredne Google Docs
Toperz ;-) czyli OCR + Android odsłona 2 albo któraś tam
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)