Skip to content

Instantly share code, notes, and snippets.

@akiani
Created April 3, 2012 02:54
Show Gist options
  • Save akiani/2288949 to your computer and use it in GitHub Desktop.
Save akiani/2288949 to your computer and use it in GitHub Desktop.
Why does BuffredReader get slow after reading a couple of Gigabytes?
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* @author Amirhossein Kiani (amir@binatechnologies.com) Created on Mar 29, 2012
*/
public class TestWriter {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(args[0]));
BufferedWriter writer = new BufferedWriter(new FileWriter(args[1]));
long packetNumber = 1;
long start;
long packetSize = 24;
long readerTime = 0;
long writerTime = 0;
long flushTime;
Runtime runtime = Runtime.getRuntime();
long aggregateFlushTimer = 0;
int mb = 1024 * 1024;
while (reader.ready() && !Thread.interrupted()) {
packetNumber++;
start = System.nanoTime();
String line;
int lineNumber = 1;
long startWriteLine;
long startReadLine;
while (lineNumber <= packetSize && reader.ready() && !Thread.interrupted()) {
startReadLine = System.nanoTime();
line = reader.readLine();
readerTime += (System.nanoTime() - startReadLine);
lineNumber++;
startWriteLine = System.nanoTime();
writer.write(line);
writer.newLine();
writerTime += (System.nanoTime() - startWriteLine);
line = null;
}
start = System.nanoTime();
writer.flush();
flushTime = (System.nanoTime() - start);
aggregateFlushTimer += flushTime;
if (packetNumber % 10000 == 0) {
System.out.println("Average buffer flushing time per packet:"
+ (aggregateFlushTimer / (packetNumber * packetSize)) + " ns");
System.out.println("Average reading from input file time per packet:"
+ (readerTime / (packetNumber * packetSize)) + " ns");
System.out.println("Average writing to socket time per packet:"
+ (writerTime / (packetNumber * packetSize)) + " ns");
System.out.println("Used Memory:" + (runtime.totalMemory() - runtime.freeMemory()) / mb);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment