JAva API書き込みテキストファイル比較FileOutputStream,BufferedOutputStream,FileWriter
最近のプロジェクトでは大きなファイルを操作するために、JAVA ioのテストをしました.
Java.ioパッケージのFileOutputStreamの場合、BufferedOutputStreamとFileWriterの3つの異なるクラスがテキストファイルのパフォーマンスに書き込まれます.
テストコードと結果は次のとおりです.
環境:マシンibm thinkpad 61 i、
構成:2.0 GデュアルコアCPU、2 Gメモリ、オペレーティングシステムxp sp 2、java api 1.5.
以下の結果は複数回実行され,よく現れるデータを取り,単純な比較であるため詳細な統計は行わない.
1.count=1 000、すなわち、1 000行の書き込みの場合、66.4 KBの書き込みサイズ:
FileOutputStream実行時間:31豪秒
BufferedOutputStream実行時間:16豪秒
FileWriter実行時間:0豪秒
2.count=10,000の、すなわち、10,000行を書く場合、664 KBのファイルサイズが書かれます.
FileOutputStream実行時間:78豪秒
BufferedOutputStream実行時間:32豪秒
FileWriter実行時間:15豪秒
3.count=100,000、すなわち、書き込みファイル100,000行の場合、書き込みファイルサイズは6.7 MB:
FileOutputStream実行時間:453豪秒
BufferedOutputStream実行時間:172豪秒
FileWriter実行時間:156豪秒
4.count=1,000,000の、つまり1,000,000行の書き込みの場合、書き込みファイルサイズは64.8 MB:
FileOutputStream実行時間:4500豪秒
BufferedOutputStream実行時間:2422豪秒
FileWriter実行時間:2500豪秒
5.count=10,000、すなわち、書き込みファイル10,000,000行の場合、書き込みファイルサイズは648 MB:
FileOutputStream実行時間:52453豪秒
BufferedOutputStream実行時間:25921豪秒
FileWriter実行時間:36094豪秒
FileOutputStream実行時間:51547豪秒
BufferedOutputStream実行時間:35203豪秒
FileWriter実行時間:31609豪秒
FileOutputStream実行時間:50078豪秒
BufferedOutputStream実行時間:33515豪秒
FileWriter実行時間:29516豪秒
以上のデータから,バッファフローBufferedOutputStreamを用いなければ,FileOutputStreamがファイルを書くロバスト性はよくないことが分かる.10,000行のファイルを書く場合、FileOutputStreamはFileWriterより10,000-21,000ミリ秒遅い(10-21秒).
この数秒の時間を軽視してはいけない.操作するデータ量が大きいと、この点の性能の差が大きくなります.データベースを操作してjavaでエクスポートして数億件のレコードファイルを生成する場合、待ち時間は10分以上かかり、性能の差が大きくなります.
Java.ioパッケージのFileOutputStreamの場合、BufferedOutputStreamとFileWriterの3つの異なるクラスがテキストファイルのパフォーマンスに書き込まれます.
テストコードと結果は次のとおりです.
環境:マシンibm thinkpad 61 i、
構成:2.0 GデュアルコアCPU、2 Gメモリ、オペレーティングシステムxp sp 2、java api 1.5.
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
public class TestTxtWriter {
public TestTxtWriter() {
}
public static void main(String[] args) {
FileOutputStream out = null;
FileOutputStream outSTr = null;
BufferedOutputStream Buff = null;
FileWriter fw = null;
int count = 10000000;//
try {
out = new FileOutputStream(new File("D:/FileOutputStream.txt"));
long begin = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
out.write(" FileOutputStream,BufferedOutputStream FileWriter, \r
".getBytes());
}
out.close();
long end = System.currentTimeMillis();
System.out.println("FileOutputStream :" + (end - begin) + " ");
outSTr = new FileOutputStream(new File("D:/BufferedOutputStream.txt"));
Buff = new BufferedOutputStream(outSTr);
long begin0 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
Buff.write(" FileOutputStream,BufferedOutputStream FileWriter, \r
" .getBytes());
}
Buff.flush();
Buff.close();
long end0 = System.currentTimeMillis();
System.out.println("BufferedOutputStream :" + (end0 - begin0) + " ");
fw = new FileWriter("D:/FileWriter.txt");
long begin3 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
fw.write(" FileOutputStream,BufferedOutputStream FileWriter, \r
");
}
fw.close();
long end3 = System.currentTimeMillis();
System.out.println("FileWriter :" + (end3 - begin3) + " ");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fw.close();
Buff.close();
outSTr.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以下の結果は複数回実行され,よく現れるデータを取り,単純な比較であるため詳細な統計は行わない.
1.count=1 000、すなわち、1 000行の書き込みの場合、66.4 KBの書き込みサイズ:
FileOutputStream実行時間:31豪秒
BufferedOutputStream実行時間:16豪秒
FileWriter実行時間:0豪秒
2.count=10,000の、すなわち、10,000行を書く場合、664 KBのファイルサイズが書かれます.
FileOutputStream実行時間:78豪秒
BufferedOutputStream実行時間:32豪秒
FileWriter実行時間:15豪秒
3.count=100,000、すなわち、書き込みファイル100,000行の場合、書き込みファイルサイズは6.7 MB:
FileOutputStream実行時間:453豪秒
BufferedOutputStream実行時間:172豪秒
FileWriter実行時間:156豪秒
4.count=1,000,000の、つまり1,000,000行の書き込みの場合、書き込みファイルサイズは64.8 MB:
FileOutputStream実行時間:4500豪秒
BufferedOutputStream実行時間:2422豪秒
FileWriter実行時間:2500豪秒
5.count=10,000、すなわち、書き込みファイル10,000,000行の場合、書き込みファイルサイズは648 MB:
FileOutputStream実行時間:52453豪秒
BufferedOutputStream実行時間:25921豪秒
FileWriter実行時間:36094豪秒
FileOutputStream実行時間:51547豪秒
BufferedOutputStream実行時間:35203豪秒
FileWriter実行時間:31609豪秒
FileOutputStream実行時間:50078豪秒
BufferedOutputStream実行時間:33515豪秒
FileWriter実行時間:29516豪秒
以上のデータから,バッファフローBufferedOutputStreamを用いなければ,FileOutputStreamがファイルを書くロバスト性はよくないことが分かる.10,000行のファイルを書く場合、FileOutputStreamはFileWriterより10,000-21,000ミリ秒遅い(10-21秒).
この数秒の時間を軽視してはいけない.操作するデータ量が大きいと、この点の性能の差が大きくなります.データベースを操作してjavaでエクスポートして数億件のレコードファイルを生成する場合、待ち時間は10分以上かかり、性能の差が大きくなります.