Skip to content

Instantly share code, notes, and snippets.

@shaik2many
Created November 7, 2014 17:31
Show Gist options
  • Save shaik2many/8d9ffc695ce23729c910 to your computer and use it in GitHub Desktop.
Save shaik2many/8d9ffc695ce23729c910 to your computer and use it in GitHub Desktop.
java file write performance
/**
* http://stackoverflow.com/questions/1062113/fastest-way-to-write-huge-data-in-text-file-java
*
* I have to write huge data in text[csv] file. I used BufferedWriter to write the data and it
* took around 40 secs to write 174 mb of data. Is this the fastest speed java can offer?
* bufferedWriter = new BufferedWriter ( new FileWriter ( "fileName.csv" ) );
*
* You might try removing the BufferedWriter and just using the FileWriter directly. On a modern system
* there's a good chance you're just writing to the drive's cache memory anyway.
* It takes me in the range of 4-5 seconds to write 175MB (4 million strings) -- this is on a dual-core 2.4GHz Dell
* running Windows XP with an 80GB, 7200-RPM Hitachi disk.
*/
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
public class FileWritingPerfTest {
private static final int ITERATIONS = 5;
private static final double MEG = (Math.pow(1024, 2));
private static final int RECORD_COUNT = 4000000;
private static final String RECORD = "Help I am trapped in a fortune cookie factory\n";
private static final int RECSIZE = RECORD.getBytes().length;
public static void main(String[] args) throws Exception {
List<String> records = new ArrayList<String>(RECORD_COUNT);
int size = 0;
for (int i = 0; i < RECORD_COUNT; i++) {
records.add(RECORD);
size += RECSIZE;
}
System.out.println(records.size() + " 'records'");
System.out.println(size / MEG + " MB");
for (int i = 0; i < ITERATIONS; i++) {
System.out.println("\nIteration " + i);
writeRaw(records);
writeBuffered(records, 8192);
writeBuffered(records, (int) MEG);
writeBuffered(records, 4 * (int) MEG);
}
}
private static void writeRaw(List<String> records) throws IOException {
File file = File.createTempFile("foo", ".txt");
try {
FileWriter writer = new FileWriter(file);
System.out.print("Writing raw... ");
write(records, writer);
} finally {
// comment this out if you want to inspect the files afterward
file.delete();
}
}
private static void writeBuffered(List<String> records, int bufSize) throws IOException {
File file = File.createTempFile("foo", ".txt");
try {
FileWriter writer = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(writer, bufSize);
System.out.print("Writing buffered (buffer size: " + bufSize + ")... ");
write(records, bufferedWriter);
} finally {
// comment this out if you want to inspect the files afterward
file.delete();
}
}
private static void write(List<String> records, Writer writer) throws IOException {
long start = System.currentTimeMillis();
for (String record: records) {
writer.write(record);
}
writer.flush();
writer.close();
long end = System.currentTimeMillis();
System.out.println((end - start) / 1000f + " seconds");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment