I would probably recommend just writing your own code to write your objects
out to the file in a format you define that is designed for your use case.

On Tue, Aug 18, 2009 at 8:43 PM, rukiman <[email protected]> wrote:

>
> Ok I spent alot of time over the weekend working on this. And I'm out
> of options.
>
> I profiled it and most of the time is spend on writeObject as
> expected. This game has a large object graph with cyclic references
> and hence it is taking 52 seconds on the emulator to serialize and
> about half to deserialize.
>
> I though I would go through my classes and explicity create a
> writeObject() and readObject() functions where I explicility write out
> all the fields myself.
>
>    private void writeObject(ObjectOutputStream out) throws
> IOException {
>        out.writeObject(board);
>        out.writeObject(guesser);
>        out.writeObject(planner);
>        out.writeInt(possibleMoves.size());
>        for(int i=0; i<possibleMoves.size(); i++) {
>                out.writeObject(possibleMoves.elementAt(i));
>        }
>        out.writeInt(lastCaptureCounter);
>        out.writeInt(aiSkillLevel);
>    }
>
>    private void readObject(ObjectInputStream in) throws IOException,
> ClassNotFoundException {
>        board = (StrategoBoard) in.readObject();
>        guesser = (Guesser) in.readObject();
>        planner = (Planner) in.readObject();
>        int length = in.readInt();
>        possibleMoves = new Vector<Move>(length);
>        for(int i=0; i<length; i++) {
>                possibleMoves.add(i, (Move) in.readObject());
>        }
>        lastCaptureCounter = in.readInt();
>        aiSkillLevel = in.readInt();
>    }
>
> The above is just an example of one of the many classes I have done
> this to.
>
> I was hoping this would be quicker. However because I still have to
> call writeObject() it seems like I am not saving any time according to
> the profiler there isn't any noticeable difference in speed. So I
> started looking into other alternatives like xstream but that didnt
> work as it couldn't serialize some of my fields in my class but it is
> calling writeObject so doubt it will be any faster.
>
> So what are my alternatives to not using Java serialization? I can
> probably convert Serializable to Externalizable and then call the
> writeExternal and readExternal functions directly myself  as they are
> public functions. However do you think this will be any faster? Also
> if I am doing this, I am not sure how to handle references to objects.
> I don't really want to serialize X copies of the same thing, as then
> the code will most likely be broken once it is deserialized.
>
> Any suggestions are greatly welcome. I'm out of ideas and quite new to
> serialization. I have in my research come across
> http://www.eishay.com/2009/03/more-on-benchmarking-java-serialization.html
>
> protobuf seems like it is fast but slow in object creation. Would you
> recommended doing it this way? I'm confused. :S
>
>
> On Jul 30, 11:53 am, rukiman <[email protected]> wrote:
> > I must have been very very patient the first time round or lost track
> > of time because last night, I got back to the game and timed
> theserializationand it took about a min from hitting the back key to
> > displaying the menu! Also this delay didn't exist until my recent
> > changes to do with theserialization.
> >
> > I will profile tonight or tomorrow and report back my findings.
> >
> > On Jul 29, 6:14 am, Dan Bornstein <[email protected]> wrote:
> >
> > > On Mon, Jul 27, 2009 at 9:24 PM, Dianne Hackborn <[email protected]>
> wrote:
> > > > On Mon, Jul 27, 2009 at 8:35 PM, rukiman <[email protected]>
> wrote:
> > > >> Yes I did mean Javaserialization. Any reason why I can't use it
> > > >> (apart from it beingslow) ?
> >
> > > > Um...  it being super-crazyslow? :)
> >
> > > It's also very fragile, in that small innocuous-seeming changes to
> > > your code could subtly break yourserialization, and, worse, small
> > > innocuous-seeming changes to the platform code could also break it. We
> > > on the Android team of course endeavor not to break application code,
> > > but we are not perfect by any stretch of the imagination, and
> > >serializationis a known tricky area to get right.
> >
> > > Personally, I might useserializationwhen prototyping a system, but I
> > > would be very reluctant to include its use in a finished product.
> >
> > > All that being said, if you happen to profile yourserialization-using
> > > code and find that the slowness is directly due to code in the core
> > > library (classes in java.*, javax.*, or org.apache.*), I would
> > > appreciate a bug report detailing your observations.
> >
> > > Cheers,
> >
> > > -dan
> >
>


-- 
Dianne Hackborn
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to