原始版本
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class StringGenerator {
public static void main(String[] args) {
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
StringBuilder str = new StringBuilder();
str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(1000));
str.append("aovnodnvds");
writer.write(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件写进去了:
看看能不能读出来:
读的出来,那就正式测试吧:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class SplitTest {
public static void main(String[] args) {
String str = "";
try (BufferedReader reader = new BufferedReader(new FileReader("text.text"))) {
str = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
long time0 = System.currentTimeMillis();
StringTokenizer st = new StringTokenizer(str, "#");
while (st.hasMoreTokens()) {
st.nextToken();
}
long time1 = System.currentTimeMillis();
String[] array = str.split("#");
for (String s : array) {}
long time2 = System.currentTimeMillis();
System.out.println("StringTokenizer的运行时间是:" + (time1-time0));
System.out.println("split()的运行时间是:" + (time2-time1));
}
}
运行结果:
StringTokenizer的运行时间是:9
split()的运行时间是:0
文本内容×10
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class StringGenerator {
public static void main(String[] args) {
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
StringBuilder str = new StringBuilder();
str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(10000));
str.append("aovnodnvds");
writer.write(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
StringTokenizer的运行时间是:10
split()的运行时间是:0
文本内容×100
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class StringGenerator {
public static void main(String[] args) {
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
StringBuilder str = new StringBuilder();
str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(100000));
str.append("aovnodnvds");
writer.write(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
看看这3.6MB的文件吧…… 运行结果:
StringTokenizer的运行时间是:20
split()的运行时间是:10
文本内容×1000
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class StringGenerator {
public static void main(String[] args) {
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.text"))) {
StringBuilder str = new StringBuilder();
str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(1000000));
str.append("aovnodnvds");
writer.write(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
惨绝人寰的36M: 运行结果:
StringTokenizer的运行时间是:90
split()的运行时间是:140
文本内容×10000
这个时候虚拟机就有点顶不住,我忘了是1W倍还是10W倍数据,反正基本在GB级别的时候,虚拟机就崩了……
试着调了虚拟机,也没啥用,就试着不在一次写入,而是改成分批次写入,每次都是追加模式……
import java.io.FileWriter;
import java.io.IOException;
public class StringGenerator {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("text.text", true)) {
StringBuilder str = new StringBuilder();
str.append("afiaongaoncanivnrfbnavoiadnvonvoron#".repeat(1000000));
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?