栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在文本文件Java中写入大量数据的最快方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在文本文件Java中写入大量数据的最快方法

你可以尝试删除BufferedWriter并直接使用FileWriter。在现代系统上,无论如何,你很有可能只是写入驱动器的缓存。

我需要4-5秒的时间来写入175MB(400万个字符串)-这是在运行Windows XP和80GB,7200-RPM日立磁盘的双核2.4GHz戴尔上进行的。

你能否确定记录检索有多少时间和文件写入有多少时间?

import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.ArrayList;import java.util.List;public class FileWritingPerfTest {private static final int ITERATIONS = 5;private static final double MEG = (Math.pow(1024, 2));private static final int RECORD_COUNT = 4000000;private static final String RECORD = "Help I am trapped in a fortune cookie factoryn";private static final int RECSIZE = RECORD.getBytes().length;public static void main(String[] args) throws Exception {    List<String> records = new ArrayList<String>(RECORD_COUNT);    int size = 0;    for (int i = 0; i < RECORD_COUNT; i++) {        records.add(RECORD);        size += RECSIZE;    }    System.out.println(records.size() + " 'records'");    System.out.println(size / MEG + " MB");    for (int i = 0; i < ITERATIONS; i++) {        System.out.println("nIteration " + i);        writeRaw(records);        writeBuffered(records, 8192);        writeBuffered(records, (int) MEG);        writeBuffered(records, 4 * (int) MEG);    }}private static void writeRaw(List<String> records) throws IOException {    File file = File.createTempFile("foo", ".txt");    try {        FileWriter writer = new FileWriter(file);        System.out.print("Writing raw... ");        write(records, writer);    } finally {        // comment this out if you want to inspect the files afterward        file.delete();    }}private static void writeBuffered(List<String> records, int bufSize) throws IOException {    File file = File.createTempFile("foo", ".txt");    try {        FileWriter writer = new FileWriter(file);        BufferedWriter bufferedWriter = new BufferedWriter(writer, bufSize);        System.out.print("Writing buffered (buffer size: " + bufSize + ")... ");        write(records, bufferedWriter);    } finally {        // comment this out if you want to inspect the files afterward        file.delete();    }}private static void write(List<String> records, Writer writer) throws IOException {    long start = System.currentTimeMillis();    for (String record: records) {        writer.write(record);    }    writer.flush();    writer.close();    long end = System.currentTimeMillis();    System.out.println((end - start) / 1000f + " seconds");}}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号