Richard,
thanks for suggestion.

My notes are structured. The app allows for the notes to be in the
folders one level deep. That's why I opted for XML.

I'll try to find out the presentation and post the link here for
others.

On Jul 22, 1:17 pm, Richard Schilling <richard.rootwirel...@gmail.com>
wrote:
> Yes, there were some good suggestions.  And, yes, using the database
> is a great idea.  But I have another, and I use  this general approach
> a lot when I need to import/export data or just ship files around on a
> device, or when memory and performance are key.
>
> XML parsers, streaming or in-memory DOM are time consuming and often
> not ncessary when you're working with simple data like strings.  XML
> is best used when you need to tag the data with a lot of attributes.
> Not only that, but XML bloats the memory requirements of your
> application multiple times because you have to save all XML characters
> (e.g. '<', '=').
>
> You'll get the most speed out of processing, especially I/O operations
> if you first reduce each note to a binary form (e.g. array of
> characters).  If you need to store all the notes in a single file,
> then I would suggest some format like this:
>
> HEADER LENGTH STRING HEADER LENGTH STRING .... .etc .....
>
> Here's some code.
>
> public static byte[] encode(String s){
>
>                 byte[] header = "CAFEBABE".getBytes(); // or some other magic 
> token
>                 byte[] chars = s.getBytes();
>                 byte[] sizeBytes = intToByteArray(chars.length); // convert 
> an int
> to a byte array - defined elsewhere.
>
>                 int totalLength = header.length + chars.length + 
> sizeBytes.length;
>                 ByteBuffer buf = ByteBuffer.allocate(totalLength);
>                 buf.put(header);
>                 buf.put(sizeBytes);
>                 buf.put(chars);
>
>                 buf.position(0);
>                 return buf.array();
>         }
>
> Pass each string in, and then pack the results from each call into
> your file.
>
> Richard Schilling
> Root Wireless
>
> On Jul 22, 12:57 pm, gnugu <rho...@gmail.com> wrote:
>
> > > Just creating 1000 objects isn't going to take 45 seconds, it sounds like
>
> > I was running it in the emulator with the debugger attached. I'll
> > check logs and try the profiler.
>
> > Thanks.
>
> > On Jul 22, 12:02 pm, Dianne Hackborn <hack...@android.com> wrote:
>
> > > Just creating 1000 objects isn't going to take 45 seconds, it sounds like
> > > you have something really bad going on somewhere.  With it taking that
> > > amount of time, you will probably quickly see some serious hot spots if 
> > > you
> > > run the profiler.
>
> > > Also if you are seeing log messages about the GC running during that time,
> > > this means that something in your code is creating tons and tons of
> > > temporary objects.  Again the profiler should help a lot in tracking this
> > > down.
>
> > > On Wed, Jul 22, 2009 at 11:39 AM, gnugu <rho...@gmail.com> wrote:
>
> > > > Dianne,
>
> > > > It is not reading and writing that's slow.
>
> > > > I have a class that has Notes field (ArrayList<Note>). I wrote my test
> > > > to create 1000 note objects and add it took 45 seconds.
> > > > Because I can't get XML string out of DOM Document I can't use the
> > > > Document as my storage for notes which leaves me with creating all
> > > > these objects as I read the XML.
>
> > > > It would be ideal for me to use MySQL to store the notes but then I
> > > > would want to encrypt the table as a whole rather then individual
> > > > records.
>
> > > > My own binary format might work if I create my own data reader that
> > > > would work on my binary data. That's a lot of work.
>
> > > > Hmm, I wonder if I could simply encrypt the database file. But then
> > > > how do I feed it to DatabaseHelper?
>
> > > > On Jul 22, 11:26 am, Dianne Hackborn <hack...@android.com> wrote:
> > > > > Which part is slow, reading or writing?  If it is writing, just stay 
> > > > > the
> > > > > heck away from the standard XML writers, they are horrendous.  There 
> > > > > is a
> > > > > FastXmlSerializer with limited functionality that you could copy out 
> > > > > of
> > > > the
> > > > > source code for your own use:
>
> > > > >http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;...
>
> > > > > That said, XML is just pretty intrinsically inefficient to read and
> > > > write.
> > > > > I have been yelled at more than once about using it at all. :)  If the
> > > > > amount of data you are storing is relatively large, you may want to 
> > > > > just
> > > > use
> > > > > your own binary format.  Yes, this does require a lot more work to 
> > > > > deal
> > > > with
> > > > > compatibility as the format changes and such, but often that is worth 
> > > > > it,
>
> > > > > On Wed, Jul 22, 2009 at 9:23 AM, gnugu <rho...@gmail.com> wrote:
>
> > > > > > Hi,
> > > > > > I'm working on an application where I want to save bunch of
> > > > > > information in the XML file. I am not using MySQL because I want all
> > > > > > the info to be encrypted and in one place. I don't know how this 
> > > > > > could
> > > > > > be done in the data base.
>
> > > > > > I was thinking that I would use DOM Document for my data adapter to
> > > > > > bind with ListView. But I found out that there is no way of getting
> > > > > > the XML out of DOM Document to save it to the file!
>
> > > > > > So now I use SAX to read XML and create bunch of objects one for 
> > > > > > each
> > > > > > piece of data in memory.
>
> > > > > > The SDK Guide in Designing for Performance says to avoid creating
> > > > > > objects (http://developer.android.com/guide/practices/design/
> > > > > > performance.html#object_creation<
> > > >http://developer.android.com/guide/practices/design/%0Aperformance.ht...>
> > > > > > ).
>
> > > > > > I understand and agree and even proved that the performance sucks 
> > > > > > if I
> > > > > > do it the way I described above.
>
> > > > > > What other choice there might be? Anybody has any suggestions how I
> > > > > > could save bunch of notes and have them all encrypted with ONE
> > > > > > password as a key base? I know I could use that one key to encrypt
> > > > > > every database row, but then changing the password would be 
> > > > > > difficult.
>
> > > > > > Any suggestions?
>
> > > > > > Thanks.
>
> > > > > --
> > > > > Dianne Hackborn
> > > > > Android framework engineer
> > > > > hack...@android.com
>
> > > > > 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.
>
> > > --
> > > Dianne Hackborn
> > > Android framework engineer
> > > hack...@android.com
>
> > > 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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to