And I even managed to forget the code:

        try {
                final int bs = 8192;
                final byte[] buffer = new byte[bs];
                long startTime = System.currentTimeMillis();
                OutputStream writer = openFileOutput("speedtest",
MODE_PRIVATE);
                final int size = 1000000;
                for (int i = 0; i < size; i += buffer.length)
                       writer.write(buffer, 0, Math.min(bs, size-i));
                writer.close();
                Log.i("speedtest", "speed test a: " +
(System.currentTimeMillis() -
                startTime));
                startTime = System.currentTimeMillis();

                InputStream in = openFileInput("speedtest");
                int r = 0;
                while (r >= 0) {
                        r = in.read(buffer);
                }
                in.close();

                Log.i("speedtest", "speed test b: " +
(System.currentTimeMillis() -
                startTime));
                startTime = System.currentTimeMillis();
        } catch (IOException e) {
                Log.e("test", "oops", e);
        }


On Nov 28, 9:08 pm, "Tom Gibara" <[EMAIL PROTECTED]> wrote:
> Hi Luke,
> Sorry, I did miss your follow-up post. When I got your email I dug out the
> modified code. I'm even more sorry to say that I introduced a dumb bug which
> artificially increased the speed. I accidentally put i += size, instead of i
> += buffer.length. That artificially boosted the speed hugely by outputting a
> small file duh.
>
> Anyway with my modified code (posted below) I get:
>
> 11-28 20:58:09.859: INFO/speedtest(850): speed test a: 1370
> 11-28 20:58:09.889: INFO/speedtest(850): speed test b: 31
>
> which I think is in keeping with your figures (I wouldn't my mental
> arithmetic). I do note however that this idiom in your code:
>
> FileInputStream fis = openFileInput("speedtest");
> fis.read(array);
> fis.close();
>
> is unreliable and only works by chance - in general there is no guarantee
> that any read will fill a buffer unless otherwise noted in the
> documentation.
>
> Hope you didn't waste too much time on my mistake!
>
> Tom.
>
> 2008/11/28 ______ <[EMAIL PROTECTED]>
>
>
>
> > I ran some more extensive tests and got the following:
>
> > WRITING:
> > one byte at a time written to BufferedOutputStream: 155kb/sec
> > whole array written to BufferedOutputStream: 450kb/sec
> > one byte at a time written to FileOutputStream: 8kb/sec
> > whole array written to FileOutputStream: 453kb/sec
>
> > READING:
> > one byte at a time read from BufferedInputStream: 221kb/sec
> > whole array read from BufferedInputStream: 47850kb/sec
> > one byte at a time read from FileInputStream: 9kb/sec
> > whole array read from FileInputStream: 31604kb/sec
>
> > (The reading results are a little artificial as I didn't attempt any
> > sort of buffer flush between tests...)
>
> > This shows that (in the writing case) writing single bytes to a
> > BufferedOutputStream has about a 3x overhead over writing an array to
> > a BufferedOutputStream or FileOutputStream, but writing whole arrays
> > to either buffered or unbuffered streams still does not come close to
> > the numbers you gave.  (My arrays are much larger than the default
> > buffer size of 8kb, but that shouldn't make much difference if you
> > were reading actual IO throughput numbers...)
>
> > Anyway the overall result is still an order of magnitude slower than
> > it should be, in the fastest case (using arrays).
>
> > The code is as follows.  (The two slowest cases are commented-out.)  I
> > get similar numbers using NIO channels.  What am I doing differently
> > from you?
>
> > --
>
> >                        int size = 5 * 1024 * 1024;
> >                        byte[] array = new byte[size];
>
> >                        long startTime = System.currentTimeMillis();
> >                        BufferedOutputStream bos = new
> > BufferedOutputStream(openFileOutput
> > ("speedtest", MODE_PRIVATE));
> >                         for (int i = 0; i < size; i++)
> >                                 bos.write((byte) 0);
> >                        bos.close();
> >                        Log.i("speedtest", "one byte at a time written to
> > BufferedOutputStream: " + ((size / 1024.0) / ((System.currentTimeMillis
> > () - startTime) / 1000.0)) + "kb/sec");
>
> > //                      startTime = System.currentTimeMillis();
> > //                      FileOutputStream fos = openFileOutput("speedtest",
> > MODE_PRIVATE);
> > //                      for (int i = 0; i < size; i++)
> > //                              fos.write((byte) 0);
> > //                      fos.close();
> > //                      Log.i("speedtest", "one byte at a time written to
> > FileOutputStream: " + ((size / 1024.0) / ((System.currentTimeMillis()
> > - startTime) / 1000.0)) + "kb/sec");
>
> >                        startTime = System.currentTimeMillis();
> >                        bos = new
> > BufferedOutputStream(openFileOutput("speedtest",
> > MODE_PRIVATE));
> >                        bos.write(array);
> >                        bos.close();
> >                        Log.i("speedtest", "whole array written to
> > BufferedOutputStream: "
> > + ((size / 1024.0) / ((System.currentTimeMillis() - startTime) /
> > 1000.0)) + "kb/sec");
>
> >                        startTime = System.currentTimeMillis();
> >                        FileOutputStream fos = openFileOutput("speedtest",
> > MODE_PRIVATE);
> >                        fos.write(array);
> >                        fos.close();
> >                        Log.i("speedtest", "whole array written to
> > FileOutputStream: " +
> > ((size / 1024.0) / ((System.currentTimeMillis() - startTime) /
> > 1000.0)) + "kb/sec");
>
> >                        startTime = System.currentTimeMillis();
> >                        BufferedInputStream bis = new
> > BufferedInputStream(openFileInput
> > ("speedtest"));
> >                        for (int i = 0; i < size; i++)
> >                                 bis.read();
> >                        bis.close();
> >                        Log.i("speedtest", "one byte at a time read from
> > BufferedInputStream: " + ((size / 1024.0) / ((System.currentTimeMillis
> > () - startTime) / 1000.0)) + "kb/sec");
>
> > //                      startTime = System.currentTimeMillis();
> > //                      FileInputStream fis = openFileInput("speedtest");
> > //                      for (int i = 0; i < size; i++)
> > //                              fis.read();
> > //                      fis.close();
> > //                      Log.i("speedtest", "one byte at a time read from
> > FileInputStream:
> > " + ((size / 1024.0) / ((System.currentTimeMillis() - startTime) /
> > 1000.0)) + "kb/sec");
>
> >                        startTime = System.currentTimeMillis();
> >                        bis = new
> > BufferedInputStream(openFileInput("speedtest"));
> >                        bis.read(array);
> >                        bis.close();
> >                        Log.i("speedtest", "array read from
> > BufferedInputStream: " +
> > ((size / 1024.0) / ((System.currentTimeMillis() - startTime) /
> > 1000.0)) + "kb/sec");
>
> >                        startTime = System.currentTimeMillis();
> >                        FileInputStream fis = openFileInput("speedtest");
> >                        fis.read(array);
> >                        fis.close();
> >                        Log.i("speedtest", "array read from FileInputStream:
> > " + ((size /
> > 1024.0) / ((System.currentTimeMillis() - startTime) / 1000.0)) + "kb/
> > sec");
>
> >                        deleteFile("speedtest");
--~--~---------~--~----~------------~-------~--~----~
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
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to