java如何生成上亿条文本数据,并保存到文本文件中 如题.我试过用常规循环生成,保存的方法.小数量还可以.但是数量过大,程序会出现无尽的等待.我以前看过一些密码生成器之类的软件,生成几G的文件也不过几十秒.请问是如何实现的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我主要是想知道用什么方法能写入数据比较快.计算量可以忽略.比如说用for循环for(int i=0;i<10000;i++){ for(int j=0;j<10000;j++){ for(int k=0;k<10000;k++){ String str= i+j+k+";}}}将str写入到文本文件中.这样生成的数量是非常大的.如何能速度快一些.. 上一条,内存不溢出才怪!分开N次来处理比较好点!BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。 BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 多线程处理,看看牛人怎么说吧http://blog.csdn.net/axman/archive/2007/01/12/1481197.aspx 用NIO吧,NIO要比一般IO操作快一些。楼主的那个BT代码,我还没IO操作呢,跑那个三层循环就好几分钟没跑完。要试验大文件的写入操作,不妨一次创建一个10M的byte数组,循环100次写IO不就1个G了么。 package performanceproblem;import java.io.*;public class PerformanceProblem{{ public static void main(String[] args) throws Exception { StringBuffer sb = new StringBuffer(); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("./performace.txt")); long start = System.currentTimeMillis() ; for(int i = 0; i < 100; ++i) { for(int j = 0; j < 1024; ++j) { for(int k = 0; k < 1024; ++k) { sb.append("a"); } sb.append("\n"); } bufferedWriter.write(sb.toString()); // 积累1M数据,才写一次 sb = sb.delete(0, sb.length()); } bufferedWriter.flush(); bufferedWriter.close(); long end = System.currentTimeMillis() ; System.out.println((end - start) + "ms elapsed."); }}上面程序运行的时间在我的机器(T42)上耗时11256ms。循环了1亿次。我觉得主要的耗时在写硬盘上。 java的io虽然设计的有些拖拉。。但完成lz的功能足已。用上缓冲类即可(针对你的应用设置正确的缓冲参数) 给个数据返回下标,指点下,小问题谢谢 Swing+xml 生成双击可执行的jar 刚接触java,请教菜单的问题 关于eclipse中新建工程提示工程名已经存在时如何解决 高分悬赏解决CruiseControl问题!!! new StringBuffer() 与new StringBuffer(int) 内存问题 栈中可以存放对象? 关于JFrame的问题 那些编辑器有单个文件编辑编译功能? 求问java异常处理的问题 Java实现各种排序!(二) 关于字符串转换Date类型
比如说用for循环for(int i=0;i<10000;i++){
for(int j=0;j<10000;j++){
for(int k=0;k<10000;k++){
String str= i+j+k+";
}
}
}将str写入到文本文件中.这样生成的数量是非常大的.如何能速度快一些..
分开N次来处理比较好点!BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
多线程处理,看看牛人怎么说吧http://blog.csdn.net/axman/archive/2007/01/12/1481197.aspx
楼主的那个BT代码,我还没IO操作呢,跑那个三层循环就好几分钟没跑完。
要试验大文件的写入操作,不妨一次创建一个10M的byte数组,循环100次写IO不就1个G了么。
import java.io.*;public class PerformanceProblem
{
{
public static void main(String[] args) throws Exception
{
StringBuffer sb = new StringBuffer();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("./performace.txt"));
long start = System.currentTimeMillis() ;
for(int i = 0; i < 100; ++i)
{
for(int j = 0; j < 1024; ++j)
{
for(int k = 0; k < 1024; ++k)
{
sb.append("a");
}
sb.append("\n");
}
bufferedWriter.write(sb.toString()); // 积累1M数据,才写一次
sb = sb.delete(0, sb.length());
}
bufferedWriter.flush();
bufferedWriter.close();
long end = System.currentTimeMillis() ;
System.out.println((end - start) + "ms elapsed.");
}
}上面程序运行的时间在我的机器(T42)上耗时11256ms。循环了1亿次。
我觉得主要的耗时在写硬盘上。
用上缓冲类即可(针对你的应用设置正确的缓冲参数)