|
Academic Work Personal
|
Java /
Accelerate System.out.print
ProblemUsing SolutionLet's see a comparative test first:
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
/**
* how to accelerate System.out.print()
*
* @author jabba
*/
public class TurboPrint
{
private final static int MAX = 1000000; // 1_000_000
private final static int BUFFER = 4096; // 4 KB
private final static PrintStream bufferedSystemOut =
new PrintStream(new BufferedOutputStream(System.out, BUFFER));
public static void main(String[] args) throws Exception
{
TurboPrint main = new TurboPrint();
//main.test_01(); // 10697 msec.
//main.test_02(); // 392 msec.
//main.test_03(); // 1514 msec.
main.test_04(); // 382 msec., WINNER
}
/**
* Naive approach.
*/
private void test_01()
{
System.err.println("Test 01");
System.err.println("=======");
//
long start = System.currentTimeMillis();
for (int i = 0; i < MAX; ++i)
{
System.out.print("abcdefghijk ");
System.out.print(String.valueOf(i));
System.out.print('\n');
}
System.err.println("Loop time: " + (System.currentTimeMillis() - start));
}
private void test_02() throws Exception
{
System.err.println("Test 02");
System.err.println("=======");
//
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream(java.io.FileDescriptor.out), "ASCII"), BUFFER);
long start = System.currentTimeMillis();
for (int i = 0; i < MAX; i++)
{
out.write("abcdefghijk ");
out.write(String.valueOf(i));
out.write('\n');
}
out.flush();
System.err.println("Loop time: " + (System.currentTimeMillis() - start));
}
private void test_03()
{
System.err.println("Test 03");
System.err.println("=======");
//
long start = System.currentTimeMillis();
for (int i = 0; i < MAX; ++i)
{
bufferedSystemOut.print("abcdefghijk ");
bufferedSystemOut.print(String.valueOf(i));
bufferedSystemOut.print('\n');
}
bufferedSystemOut.flush();
System.err.println("Loop time: " + (System.currentTimeMillis() - start));
}
private void test_04() throws Exception
{
System.err.println("Test 04");
System.err.println("=======");
//
BufferedWriter out =
new BufferedWriter(new OutputStreamWriter(System.out), BUFFER);
long start = System.currentTimeMillis();
for (int i = 0; i < MAX; i++)
{
out.write("abcdefghijk ");
out.write(String.valueOf(i));
out.write('\n');
}
out.flush();
System.err.println("Loop time: " + (System.currentTimeMillis() - start));
}
} // eof class TurboPrint
That is, use the following code:
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out), 4096);
out.write("abcdefghijk ");
...
out.flush(); // DON'T FORGET THIS
See also http://www.rgagnon.com/javadetails/java-0603.html . |
![]() anime | bash | blogs | bsd | c/c++ | c64 | calc | comics | convert | cube | del.icio.us | digg | east | eBooks | egeszseg | elite | firefox | flash | fun | games | gimp | google | groovy | hardware | hit&run | howto | java | javascript | knife | lang | latex | liferay | linux | lovecraft | magyar | maths | movies | music | p2p | perl | pdf | photoshop | php | pmwiki | prog | python | radio | recept | rts | scala | scene | sci-fi | scripting | security | shell | space | súlyos | telephone | torrente | translate | ubuntu | vim | wallpapers | webutils | wikis | windows Blogs and Dev. * Ubuntu Incident Places Debrecen | France | Hungary | Montreal | Nancy Notes Hobby Projects * Jabba's Codes Quick Links [ edit ] |