实验要求:
设计程序实现比较文件写入操作中,使用FileWriter、FileOutputStream、BufferWriter、BufferOutputStream这四个类的效率,通过写入的耗时来判断效率的高低。
实验步骤:
依次输出的文件大小为:10M、100M、200M、1G、2G;
总共进行5次输出实验,每次输出后记录各种方式的耗时情况,使用可视化的方式比较耗时。给出结论。
Trade.java
依次输出文件这个的大小的判断和选择,我是按照一本电子小说来分类的,注释中有介绍,按照一行数据这样的形式来进行转换,其次,说是输出文件,但我这里面并没有额外的处理,就是单纯依赖Eclipse存储的工作区间,然后学校机房25 G的内存被全部占满,在数据处理的时候,可以适当缩小比例。
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Trade {
//500000字=1M=100000行数据
//10M=1000000行
//100M=10000000行
//200M=20000000行
//1G=102400000行
//2G=204800000行
private static final int COUNT =1000000 ;
/**
* 比较时间
*/
public void compareTime() {
System.out.println("====start======");
useFileWriter();
useFileOStream();
useBufferOStream();
useBufferedWriter();
System.out.println("=====end========");
}
/**
* 使用FileWriter
*/
public void useFileWriter() {
try {
File file = new File("text01.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter t = new FileWriter(file,true);
long begin = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
t.write("java--测试写文件 fos\r\n");
}
t.flush();
t.close();
System.out.println("FileWriter 执行耗时: " + (System.currentTimeMillis() - begin));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用FileOutputStream
*/
public void useFileOStream() {
try {
File file = new File("text02.txt");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file,true);
long begin = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
fos.write("java--测试写文件 fos\r\n".getBytes());
}
fos.flush();
fos.close();
System.out.println("FileOutputStream执行耗时: " + (System.currentTimeMillis() - begin));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用BufferedOutputStream
*/
public void useBufferOStream() {
try {
File file = new File("text03.txt");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file,true);
BufferedOutputStream bos = new BufferedOutputStream(fos);
long begin = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
bos.write("java--测试写文件 fos\r\n".getBytes());
}
bos.flush();
bos.close();
System.out.println("BufferedOutputStream执行耗时: " + (System.currentTimeMillis() - begin));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用BufferedWriter
*/
public void useBufferedWriter() {
try {
File file = new File("text04.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fWriter = new FileWriter(file,true);
BufferedWriter bufferedWriter = new BufferedWriter(fWriter);
long begin = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
bufferedWriter.write("java--测试写文件 fos\r\n");
}
bufferedWriter.flush();
bufferedWriter.close();
System.out.println("BufferedWriter 执行耗时: " + (System.currentTimeMillis() - begin));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Test.java
public class Test {
public static void main(String [] args){
Trade trade = new Trade();
trade.compareTime();
}
}
根据每个人情况不同,以下数据也存在差异,这里我考虑到自己电脑的存储,还是尽可能的把数据放缩得比较小,然后就可能存在差异。
10 M时,四个类的耗时
100 M时,四个类的耗时
200 M时,四个类的耗时
1 G时,四个类的耗时
2 G时,四个类的耗时
最后,有一个可视化处理,我以为要用到Java里面的可视化界面,然后就需要添加相应插件,其实就是简单做一个图表,柱状图之类的都行,其实就是把我以上四个图的数据再处理,这个我之后再放出来吧。