Thanks for the replies.  Those were some of the next steps I was
considering, but I very much appreciate the time you guys took to
respond.  I was just astounded by the overhead involved in reading
byte by byte!

BTW, this was with a fast connection (2mbps+).

Best,

Marc

On Mar 28, 3:42 pm, Dan Bornstein <[email protected]> wrote:
> On Sat, Mar 28, 2009 at 3:16 PM, Marc <[email protected]> wrote:
> > So I have the following code...
>
> >                StringBuilder sb = new StringBuilder(4096);
>
> >                while (true) {
> >                        int i = in.read();
> >                        if (i == 0)
> >                            break;
> >                        else if (i == -1)
> >                            throw new EOFException();
> >                        sb.append((char)i);
> >                }
>
> > What I see (with thousands of times run) is that this code takes about
> > 1ms for every 7-10 bytes read...  So reading just 10k takes almost a
> > SECOND!
>
> > Can anyone explain this?
>
> One guess is that the stream you are reading from isn't buffered, and
> so you may be going through a lot of layers of translation for each
> byte read, rather than getting them batched up and thereby handled
> more efficiently. Try using a BufferedInputStream (or a
> BufferedReader, see last paragraph below).
>
> As a minor efficiency point, rather than use a cascading if-else-if,
> you might want to use a switch statement.
>
> You don't say what physical platform you're running this on. If you
> are on a device connected via a cell network, this code could be
> running slow because your net connection is slow. 10k/second (aka
> 80kbps) is within the realm of possibility in a bad EDGE/3G coverage
> area. 10k/second is actually the fastest speed you can possibly expect
> with a 2G (GPRS) connection, according to Wikipedia. And if you are
> using an emulator, then all bets are off in terms of speed, since it
> would totally depend on the characteristics of your host platform.
>
> Note: If you are currently using an InputStream directly rather than a
> Reader, then the code above will only work with ISO-8859-1 encoded
> data. If you want to handle arbitrary encodings, you'll probably want
> to interpose an InputStreamReader.
>
> Cheers,
>
> -dan
--~--~---------~--~----~------------~-------~--~----~
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