Saturday, June 4, 2011

Perbandingan Kecepatan Pembacaan File di Java

Kebetulan ingin membandingkan kecepatan dua metode dalam pemrograman Java, untuk mengakses file. Kode bisa dilihat di bagian bawah posting ini. Metode pertama, saya menggunakan FileInputStream dan FileOutputStream. Sedang metode kedua menggunakan FileReader dan FileWriter. Studi kasus yang saya gunakan adalah membuat salinan file. File yang saya gunakan untuk uji coba adalah file MP3 lagu India berjudul Zoobi Doobi yang ukurannya sebesar 4,25 MB.

Hasilnya, dengan menggunakan FileInputStream dan FileOutputStream, waktu yang diperlukan untuk menyalin file tersebut selama 1 menit 37 detik, sedang dengan menggunakan FileReader dan FileWriter, waktu yang dibutuhkan hanya sekitar 2 detik. WOW!!!

Khawatir ada caching yang terjadi, saya membalik urutan proses uji coba, dan hasil menunjukkan hal yang sama. Sekali lagi. WOW!!!


import java.io.*;
class copyFile {
public static void main(String args[]) throws Exception {
int i;
long start;
long elapsedTimeMillis;
int elapsedTimeSec, elapsedTimeMin;

///// METODE 1 /////
start = System.currentTimeMillis();
FileInputStream fin = new FileInputStream("3idiots02.mp3");
FileOutputStream fout = new FileOutputStream("3idiots02copy1.mp3");
while ((i = fin.read()) != -1) {
fout.write(i);
}
fin.close();
fout.close();
elapsedTimeMillis = System.currentTimeMillis()-start;
elapsedTimeSec = (int) elapsedTimeMillis/1000;
elapsedTimeMin = (int) elapsedTimeSec/60;
System.out.println(elapsedTimeMin + ":" + (elapsedTimeSec-(elapsedTimeMin*60)) + ":" +(elapsedTimeMillis-(elapsedTimeSec*1000)));

///// METODE 2 /////
start = System.currentTimeMillis();
FileReader fr = new FileReader("3idiots02.mp3");
FileWriter fw = new FileWriter("3idiots02copy2.mp3");
BufferedReader br = new BufferedReader(fr);
while ((i = br.read()) != -1) {
fw.write(i);
}
fr.close();
fw.close();
elapsedTimeMillis = System.currentTimeMillis()-start;
elapsedTimeSec = (int) elapsedTimeMillis/1000;
elapsedTimeMin = (int) elapsedTimeSec/60;
System.out.println(elapsedTimeMin + ":" + (elapsedTimeSec-(elapsedTimeMin*60)) + ":" +(elapsedTimeMillis-(elapsedTimeSec*1000)));
}
}

No comments:

Post a Comment