Are you talking about NIO streams? I tried that, using 16kB buffers, and it wasn't much faster than this. I assumed that when using a BufferedOutputStream, the overhead of a single-byte read/write would be about the same as a .get() access into an ArrayList, i.e. pretty minimal given the huge disparity between memory/CPU speeds and IO speeds. Maybe I was doing something wrong... I'll test some more but if you could please let me know which classes and which methods you used to accomplish this (even if the test code you wrote is no longer around), I would be grateful.
Thanks for testing, and thanks for your reply! On Nov 22, 7:07 pm, "Tom Gibara" <[EMAIL PROTECTED]> wrote: > Your code is extremely inefficient; stick to the stream read/write methods > that use byte buffers: they are much faster because they avoid the cost of a > method call for each byte. And if you use those methods exclusively, > dropping the BufferedInput/OutputStream is almost certain to give better > performance. Modifying your code to use an 8KB buffer I got this output from > your code: > BEFORE: > > speed test a: 8361ms > speed test b: 2405ms > > AFTER: > > speed test a: 123ms > speed test b: 2ms > > Tom. > > 2008/11/22 ______ <[EMAIL PROTECTED]> > > > > > Unfortunately that doesn't explain the speed problem. The processor > > is almost 600MHz, that means it's taking 2400 CPU cycles *per byte* on > > the read operation. An unbelievable overhead. Also I get 5MB/s both > > up and down when connecting over USB, so the O/S (which is admittedly > > running native code, not Dalvik bytecodes) can go much, much faster > > than that, and it's not that the speed of flash memory is the > > bottleneck either. The overhead of Dalvik is not *that* high, so > > something else is going on that is making this about an order of > > magnitude slower than it should be. Does anyone else have any ideas? > > > On Nov 22, 9:55 am, "Sunit Katkar" <[EMAIL PROTECTED]> wrote: > > > Phones in general do not have super fast CPUs like laptop and desktops. > > > Android runs on a phone CPU which is not very fast. Overall you will see > > > that programs dont necessarily run at the same speed as on a laptop. > > > - Sunit Katkarhttp://sunitkatkar.blogspot.com/-Android OS Tutorials > > > > On Fri, Nov 21, 2008 at 8:08 PM, ______ <[EMAIL PROTECTED]> wrote: > > > > > I measure the speed of copying files to/from the SD card at about 5MB/ > > > > sec on my G1, however the following speed test tops out at about 250kB/ > > > > sec read and 125kB/sec write. (The example shown writes to the > > > > internal SD card, but writing to the removable card is about the same > > > > speed.) Why is it so slow? (Using NIO channels to write whole arrays > > > > of bytes doesn't speed it up by much...) > > > > > -- > > > > > long startTime = System.currentTimeMillis(); > > > > BufferedOutputStream writer = new BufferedOutputStream(openFileOutput > > > > ("speedtest", MODE_PRIVATE)); > > > > int size = 1000000; > > > > for (int i = 0; i < size; i++) > > > > writer.write((byte) 0); > > > > writer.close(); > > > > Log.i("speedtest", "speed test a: " + (System.currentTimeMillis() - > > > > startTime)); > > > > startTime = System.currentTimeMillis(); > > > > > BufferedInputStream in = new BufferedInputStream(openFileInput > > > > ("speedtest")); > > > > for (int i = 0; i < size; i++) > > > > in.read(); > > > > in.close(); > > > > > Log.i("speedtest", "speed test b: " + (System.currentTimeMillis() - > > > > startTime)); > > > > startTime = System.currentTimeMillis(); --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

