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 [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
-~----------~----~----~----~------~----~------~--~---