Created
November 7, 2014 17:31
-
-
Save shaik2many/8d9ffc695ce23729c910 to your computer and use it in GitHub Desktop.
java file write performance
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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